题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如:输入“I am a student.”,则输出“student. a am I”。
/*************************************************************************
> File Name: reverse_words.cpp
> Created Time: Fri 03 Jun 2016 11:57:01 AM PKT
************************************************************************/
#include<iostream>
using namespace std;
void reverse_string(char *begin,char *end)
{
if(begin==NULL || end==NULL){
return ;
}
while(begin<end){
char tmp=*begin;
*begin=*end;
*end=tmp;
begin++,end--;
}
}
void reverse_word_in_string(char *str)
{
if(str==NULL){
return;
}
char *end=str;
while(*end!='\0'){
end++;
}
end--;
char *begin=str;
reverse_string(begin,end);
begin=end=str;
while(*begin!='\0'){
if(*begin==' '){
begin++,end++;
}else if(*end==' ' || *end=='\0'){
reverse_string(begin,--end);
end++;
begin=end;
}else{
end++;
}
/* 错误做法
while(*end!=' ' && *end!='\0'){
end++;
}
end--;
reverse_string(begin,end);
end++;
begin=end;
*/
}
}
测试
void test()
{
char str[]="i am a student.";
cout<<str<<endl;
reverse_word_in_string(str);
cout<<str<<endl;
}