7-32 说反话-加强版 (20分)

我们两清 提交于 2020-03-01 07:09:41

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
/思路:首先找出字符串开头的位置(有可能开头有空格),然后从字符串的尾部开始遍历字符串,当第一次遇到一个空格(可能会遇到两个连续的空格),则输出从这个空格到上一个空格中间的字符串/
实现代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
	char s[500000];
	int i,j,k,cot=0;
	scanf("%[^\n]",&s);
	int len=strlen(s);
	for(i=0;i<len;i++)
		if(s[i]!=' ')
		{
			k=i;
			break;//找到开头的位置后停止遍历
		}
	for(i=len-1;i>k-1;i--)
	{	
		if(s[i]!=' ') cot++;//记录两个空格之间的字符个数
		else if(s[i]==' '&&cot!=0)//排除掉连续出现两次空格的情况
		{
			for(j=i+1;j<i+1+cot;j++)
				printf("%c",s[j]);
			printf(" ");//输出一个空格
			cot=0;
		}
		if(i==k)
			for(j=k;j<k+cot;j++)
				printf("%c",s[j]);
	}
	return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!