题目描述:
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。 输出格式:每个测试用例的输出占一行,输出倒序后的句子。 输入样例: Hello World Here I Come 输出样例: Come I Here World Hello
解题思路:
要求的是以空格为间隔符,以换行符为输入结束标志。可以考虑成输出的是多个字符串。为了分辨空格和回车,需要使用getchar函数(scanf不能分辨出这两者的区别)。所以输入用getchar,单个字符输入;输出用printf("%s",xxx),字符串输出。如此,需要用到二维数组。
代码:
#include<stdio.h>
int main()
{
char tem,list[50][20]={0};
int h=0,l=0,i;
//得到输入
tem=getchar();
while(tem!=10)
{
l=0;
while(tem!=32 && tem!=10)
{
list[h][l]=tem;
tem=getchar();
l++;
}
if(tem==10)
break;
h++;
tem=getchar();
}
//反向输出,第一个前面不要有空格;
printf("%s",list[h]);
for(i=h-1;i>=0;i--)
printf(" %s",list[i]);
return 0;
}
参考:
看了其他人的做法,发现输入使用scanf函数,最后结束标志认为是EOF。由于PAT判定时输入以文件格式输入,也可以完成,代码更加简洁。附上代码:
#include <stdio.h>
int main()
{
char n, str[50][20] = {0};
int i;
while (scanf("%s", str[n]) != EOF) n++;
printf("%s", str[n-1]);
for (i = n - 2; i >= 0; i--)
printf(" %s", str[i]);
return 0;
}