给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
// Date:2020/3/15
// Author:xiezhg5
#include<stdio.h>
#include<string.h>
int flag=1; //定义一个全局变量作用于输出空格
void print(char str[],int flag1,int flag2 ) // 定义一个print函数
{
int i;
if(flag!=1)
{
putchar(' '); //输出空格
}
for(i=flag2;i<=flag1;i++) //为数组元素下标赋值
{
printf("%c",str[i]);
}
flag=0; //循环完后将flag置为0
}
int main(void)
{
int i,flag1=-1,flag2=-1; // 两个flag确定一个单词的位置
char str[500001]; //不超过500000
gets(str);
for(i=strlen(str)-1;i>=0;i--) //倒序便于输出
{
if(str[i]!=' '&&flag1<0) // 单词尾部
{
flag1=i;
}
if((str[i]!=' '&&str[i-1]==' ')||(i==0)&&flag1>= 0) //单词头部
{
flag2=i;
}
if(flag1>=0&&flag2>=0)
{
print(str,flag1,flag2); //调用print函数
flag1=-1;
flag2=-1;
}
}
return 0;
}