给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
方法一:
因为PAT是单点测试,所以有一个简洁的方法,但是得手动输入Ctrl+Z结束输入
#include<cstdio>
int main(){
char ans[100][100];
int num=0;//单词的个数
while(scanf("%s",&ans[num])!=EOF){
num++;//单词个数加一
}
for(int i=num-1;i>=0;i--){
printf("%s",ans[i]);
if(i!=0){
printf(" ");
}
}
return 0;
}
方法二:
PAT不支持gets()输入,但是这种方法是不用手动输入,这里%s会自动识别空格作为字符串的结束,所以不能用scanf替代,大家有好办法可以评论下,感谢!
#include<cstdio>
#include<cstring>
int main(){
char str[100];
char ans[100][100];
gets(str);//读入字符串
int len=strlen(str);
int r=0,c=0;//r为行,c为列
for(int i=0;i<len;i++){
if(str[i]!=' '){
ans[r][c++]=str[i];//如果没遇到空格,就当成一个单词输入到二维数组中,行不变,列不断加一
}
else{//如果遇到空格,说明一个单词结束了,行增加一,列恢复至0
ans[r][c]='\0';//末尾是结束符
r++;
c=0;
}
}
for(int i=r;i>=0;i--){//注意是r,不是r-1
printf("%s",ans[i]);
if(i!=0) printf(" ");
}
return 0;
}