题目描述 Description
给出一个英语句子,希望你把句子里的单词顺序都翻转过来
输入描述 Input Description
输入包括一个英语句子。
输出描述 Output Description
按单词的顺序把单词倒序输出
样例输入 Sample Input
I love you
样例输出 Sample Output
you love I
题目思路:先把整个句子反转过来,然后再依次把单词反转过来
例如样例:I love you ------> uoy evol I -------> you love I
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<iostream> #include<algorithm> using namespace std; #define maxn 1000 char str[maxn]; void ReverseSentence(char *str)//反转整个句子 { int i,len=strlen(str); char temp; for(i=0;i<=(len-1)/2;i++) { temp=str[len-i-1]; str[len-i-1]=str[i]; str[i]=temp; } } void ReverseWords(char *str)//依次反转单词 { int i,j,k,l,len=strlen(str); char temp; for(i=0,j=0;i<len;i++) { if(str[i]==' ') { k=i; int start=k-j,_end=k-1;//每一个单词都是start开始_end结束的 while(start<_end) { temp=str[start]; str[start]=str[_end]; str[_end]=temp; start++; _end--; } j=0; } else j++;//注意这里要用else 不然会让格式变乱 } int p=k+1,q=len-1;//最后一个单词要单独反转 while(p<q) { temp=str[q]; str[q]=str[p]; str[p]=temp; p++; q--; } } int main() { while(gets(str)!=NULL)//竟然忘了gets处理到文件结束应该如何表示,太水了~~ { ReverseSentence(str); ReverseWords(str); printf("%s\n",str); } return 0; }