1009 说反话 (20分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
把读入的字符串按词入栈,然后按词出栈。循环读入字符串用while(cin.getline(c,100)),里面的长度设最大就可以。
注:
- char申请的时候开大一点,不然正好80会有一个溢出。
- 先全体逆序,再每个词进行逆序。每个词逆序时,依次入栈,每当出现以空格和’\0’为终点,进行每个词的出栈完成逆序。
- 记得每次用完的数组进行初始化,memset
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
using namespace std;
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("in.txt","r",stdin);
#endif
char a[100],c[100];
char b[100];
int len,i=0,j;
while(cin.getline(c,100))
{
len=strlen(c);
for(i=0;i<len;i++)
{
b[i]=c[len-i-1];//cout<<c[len-i-1];
}
j=0;
for(i=0;i<=len;i++)
{
if(b[i]!=' '&&i!=len)a[j++]=b[i];
else {
while(j)cout<<a[--j] ;
if(i!=len)cout<<' ';
memset(a, 0, sizeof(a));
j=0;
}
}
cout<<endl;
//cout<<b[len]<<endl;
memset(b, '\0', sizeof(b));
memset(c, '\0', sizeof(c));
}
return 0;
}