7-32 说反话-加强版
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
代码长度限制 16 KB
时间限制 300 ms
内存限制 64 MB
题解
思路:因为要将单词倒着输出,因此我们可以倒着遍历读入的句子,用一个临时的temp将单词倒着存起来,至于要判断在遍历句子时碰到空格的时候再将它倒着输出就行。
#include <stdio.h>
#include <string.h>
int main()
{
char str1[500001],temp[500001];
int n;
gets(str1);
int k=0,start=0;//k是每个独立单词的长度,start控制输出的单词间的空格
for(int i=strlen(str1)-1;i>=0;i--){//倒着遍历str1
if(str1[i]==' '){//该位为空格
if(k!=0){//当临时数组中有内容时
if(start!=0) printf(" ");
else start=1;
//输出
for(int j=k-1;j>=0;j--){
printf("%c",temp[j]);
}
}
memset(temp,0,k);//重置临时数组
k=0;//重置临时数组下标
}
else{//该位非空格
temp[k++]=str1[i];//将字符存入临时数组
}
}
if(k!=0){//当临时数组中有内容时
if(start!=0) printf(" ");
//输出
while(k--){
printf("%c",temp[k]);
}
}
return 0;
}