B1009.说反话
【PAT B1009】说反话(20分)
题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805314941992960
题目分值:20分
题目类型:字符串,简单模拟
题目描述
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式
每个测试用例的输出占一行,输出倒序后的句子。
输入样例
Hello World Here I Come
输出样例
Come I Here World Hello
思路分析
- 首先把整行读入存储到字符串中
- 然后逐个字符检查,进行单词的分拆
- 如果检查到“ ”(空格)说明一个单词结束
- 所有的单词存储在二维字符数组中,一维代表单词,二维代表单词中的字母
- 最后逆序输出即可
注意点
gets()
函数在现在的PTA系统中,已经删除在cpp
环境下的支持(趋势也是如此),所以我们要在C语言
环境下进行编译提交- 字符串最后一个字符时
/0
,需要手动赋值
参考代码
C/C++
#include<stdio.h>
#include<string.h>
char words[90][90];
int main()
{
char str[90];
gets(str);
int len = strlen(str);
int cnt1 = 0,cnt2 = 0; //cnt1记录单词个数,cnt2记录单词的长度
for(int i=0;i<len;i++)
{
if(str[i]!=' ') //扫描直到发现空格
words[cnt1][cnt2++] = str[i];
else
{
words[cnt1][cnt2] = '\0';
cnt1++; cnt2 = 0; //下一个单词
}
}
for(int i=cnt1;i>=0;i--)
{
printf("%s",words[i]);
if(i > 0) printf(" ") ; //最后一个单词输出之前,都在末尾加空格
}
return 0;
}
string.h标准库中有个strsep()分割字符串函数哦
https://c-for-dummies.com/blog/?p=1769
哇!确实很好用
你这个估计用python好像要容易一些
是的,Python在处理字符串方面是方便不少。但是因为考试的时候只保证机器上配置有C/C++和java的IDE工具,所以备考的时候一般不会选用Python。还有这个题用STL的string也简单得很,就是因为太简单,所以备考的时候也不作为打基础的方法来使用