【练习】翻转句子中单词的顺序
/************************************************************************/ /* 翻转句子中单词的顺序。 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。 思路: 利用STL,不过如此解法,恐怕违背了出题者本意
给出一个准确答案链接http://www.cnblogs.com/youwang/archive/2011/03/05/1971900.html*/ /************************************************************************/ #include <iostream> #include <vector> #include <string> using namespace std; void reverseSentence(); int main() { reverseSentence(); return 0; } void reverseSentence() { cout<<"please input the sentence"<<endl; vector<string> sentence; string s; while (cin) { cin>>s; if (cin) { sentence.push_back(s); } } while(sentence.size()!=0) { s=sentence.back(); sentence.pop_back(); cout<<s<<" "; } }
符合题意的解法
#include <iostream>
using namespace std;
void reverseSentence(char *sentence);
void reverse(char* begin,char *end);
int main()
{
char sentence[16]="I am a student.";
reverseSentence(sentence);
cout<<sentence<<endl;
return 0;
}
void reverse(char* begin,char *end)
{
if (NULL==begin||NULL==end)
{
return;
}
char temp;
while(begin<end)
{
temp=*begin;
*begin=*end;
*end=temp;
begin++;
end--;
}
}
void reverseSentence(char *sentence)
{
if (NULL==sentence)
{
return;
}
char *begin,*end;
begin=sentence;
end=sentence;
while(*end!='\0')
end++;
end--;
reverse(begin,end);
end=begin;
while(*begin!='\0')
{
while(*end!=' '&&*end!='\0')
end++;
end--;
reverse(begin,end);
if (*(end++)==' ')
{
end++;
}
if (*(end++)=='\0')
{
break;
}
begin=end;
}
// end=begin;
}
浙公网安备 33010602011771号