/*
题目描述
给定一个英语,要求编写程序,将句中所有单词按颠倒顺序输出
输入格式
测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单
词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个
空格分开,输入保证句子末尾没有多余的空格。
输入格式
每个测试用例的输出展一行,出倒叙后的句子。
样例输入
Hello World Here I Come
样例输出
Come I Here World Hello
**************************************************
思路
使用gets函数读入一整行,从左至右枚举每一个字符,以空格为为分隔符对单词进行划分
并按照顺序存放到二维字符数组中,最后按单词输入顺序的逆序来输入所有单词
注意点
1、最后一个单词之后输入空格会导致“格式错误”。
2、由于PAT是单点测试,因此产生了下面这种更简洁的方法,即使用EOF来判断是否已经输入完毕
*/
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
char str[90];
gets(str);
int len =strlen(str),r=0,h=0; //r为行,h为列
char ans[90][90]; //ans[0]~ans[r] 存放单词
for(int i=0;i<len;i++)
{
if(str[i]!=' '){ //如果不是空格,则存放ans[r][h],并令h++
ans[r][h++]=str[i];
}
else { //如果是空格,说明一个单词结束,行r增加1,列恢复至0
ans[r][h]='\0'; //末尾是结束符\0
r++;
h=0;
}
}
for(int i=r;i>=0;i--) //倒着输出单词即可
{
printf("%s",ans[i]);
if(i>0) printf(" ");
}
return 0;
}
/*
#include <stdio.h>
int main()
{
char str[80][80]; //二维数组每一行存放一个单词
char dsr[80]; //存放输入的字符串
int i, j = 0, k = 0;
for(i = 0; i < 80; i++) {
scanf("%c", &dsr[i]);
if(dsr[i] == '\n') { //当输入回车时结束
break;
}
}
dsr[i] = '\0'; //让字符串中最后一个字符(回车符)等于'\0'
for(i = 0; i < 80; i++) {
if(dsr[i] == '\0') {
str[j][k] = '\0';
break;
}
str[j][k] = dsr[i]; //将单词存到第 j 行
k++;
if(dsr[i] == ' ') {
str[j][k-1] = '\0'; //将空格换成'\0'
j++;
k = 0;
}
}
int t = j; //共有 t 个单词
for(j = t ; j >= 0; j--) {
printf("%s", str[j]);
if(j != 0) {
printf(" ");
}
}
return 0;
}
*/