给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
代码部分:
#include<stdio.h>
#include<string.h>
int main()
{
char letter[500001];
gets(letter);
int tail=-1;//我要截取单词的尾部
int head=-1;//我要截取单词的头部
int len=1;
int cnt=0;//计数器
for(int i=strlen(letter)-1;i>=0;i--)
{
if(letter[i]!=' '&&tail==-1)//如果letter[i]此时为' ',而且是第一次输入的话
{
tail=i;//记录此时的尾部位置
}
if(letter[i]!=' '&&letter[i-1]==' '||i==0&&tail!=-1)//经过遍历后如果某个字母的前面为' ',记录它的位置
{
head=i;
}
if(tail!=-1&&head!=-1)//如果都不是第一次输入
{
for(int j=head;j<=tail;j++)//输出当前单词 ,并用cnt记录
{
printf("%c",letter[j]);
cnt=1;
}
if(head!=0&&letter[0]!=' ')
{
printf(" ");
}
if(cnt==1)//如果执行过了输出,重新开始新一次的读取,让tail,head,cnt还原
{
tail=-1;
head=-1;
cnt=0;
}
}
}
return 0;
}
结果演示: