题目要求:
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
总结:
题目所给字符串长度不超过80,但是由于‘\0’占用一位,故在设置str数组时候,长度至少要为81,否则不能完全AC
AC代码
#include <stdio.h>
#include <string.h>
#include <math.h>
void Rev()
{
char str[100];;
int i,j,k,len;
gets(str);
len=strlen(str);
i=j=len-1;
while(i>=0)
{
while(i>=0&&str[i]!=' ')
{
i--;
}//从最后一位开始向前找空格
for(k=i+1;k<=j;k++)
{
printf("%c",str[k]);
}//找到空格,从空格后一位输出到j
if(i>0)printf(" ");//如果不是最后一个单词那么就输出空格
i=i-1;
j=i;//更新i和j
}
}
int main()
{
Rev();
}
上面的代码过于麻烦,如果用C++STL能极大减小编程难度
#include <stdio.h>
#include <string>
#include <string.h>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<string>ans;
string s;
while(cin>>s)
{
ans.push_back(s);
}
for(int i=(int)ans.size()-1;i>=0;i--)
{
cout<<ans[i];
if(i>=1)printf(" ");
}
}