5-32 说反话-加强版

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

输入格式:

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

输出格式:

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

输入样例:

Hello World   Here I Come

输出样例:

Come I Here World Hello

解题思路:

先处理字符串,删除多余的空格,形成新字符串。然后逆序输出刚才处理好的字符串,即碰到空格就输出单词。

解题代码:

#include<stdio.h>
#define MAX 500000

int main ()
{
	char s;
	char t[MAX];
	int i = 0, count = 0, flag = 0;
	while ((s=getchar()) != '\n') {
		if (s != ' ') {
			flag = 1; //标记遇到单词 
			t[i++] = s;
			count = 0;
		} else if (count > 0) {
			continue;
		} else if (flag) {
			t[i++] = s; //只有之前遇到单词的情况下碰到空格才把这个空格写入目标字符串 
			count ++;
		}
	} //删除多余的空格,将目标字符串放入 t 中 
	
	count = 0;
	int j;
	for (i-=1; i>=0; i--) {
		if (t[i] != ' ') {
			count ++; // 这里的 count 统计的是单词的位数 
		} else if (t[i]==' ' && count > 0) {
			for (j=i+1; j<=i+count; j++) {
				printf("%c", t[j]);
			} //遇到空格就输出单词 
			printf(" ");
			count = 0;
		}
	} // 还剩最后一个单词没输出
	for (j=i+1; j<=i+count; j++) {
		printf("%c", t[j]);
	} 

	return 0; 
}
posted @ 2016-08-04 22:16  文之  阅读(3274)  评论(0编辑  收藏  举报