/* 题目描述 给定一个英语,要求编写程序,将句中所有单词按颠倒顺序输出 输入格式 测试输入包含一个测试用例,在一行内给出总长度不超过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; } */
时间: 2024-10-13 18:49:09