#PAT练习9
1009 说反话 (20 分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
##题解
###题目分析
给定一个英语句子,要求颠倒单词顺序,句子中的单词不变。
###思路
1.我本身写的代码过于复杂不够精简,在查看了另外一个大佬的题解后说下思路
2.可以先通过strlen函数判断句子字符总数,以此可以通过for语句对整个字符串由后往前进行遍历。
3.遍历过程中,通过对空格的检测,再输出空格后面的字符串,在将空格变为结束符使下一次输出是输出一个单词。
4.最后再直接输出第一个单词
###代码
####我
#include<stdio.h>
#include<string.h>
#define M 200
int main()
{
char array[M];
int i=0,count=0,b[M],j,r;
gets(array);
while(array[i]!='\0')
{
if(array[i]==' ')
{
b[count]=i;
count+=1;
}
i+=1;
}
r=count+1;
while(r--){
if(count>=0)
j=b[count-1]+1;
count-=1;
if(count<0)
j=0;
while(array[j]!='\0'&&array[j]!=' ')
{
printf("%c",array[j]);
j+=1;
}
j=0;
if(count>=0)
printf(" ");
}
return 0;
}
####大佬的
#include <stdio.h>
#include <string.h>
int main() {
char str[81]; //创建字符串
gets(str); //读取字符串
int i = 0; //数组下标
for (i = strlen(str); i > 0; i--) { //从末尾开始遍历字符串
if (str[i] == ' ') { //如果遇到空格
printf("%s ", &str[i+1]); //输出空格后的单词
str[i] = '\0'; //把空格改为 \0,使后续输出也只有一个单词
}
}
printf("%s", &str[i]); //输出原字符串的第一个单词
return 0;
}
————————————————
版权声明:本文为CSDN博主「对方北方」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39345384/article/details/82220001