说反话-加强版(c语言)

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

输入格式:

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

输出格式:

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

输入样例:

Hello World   Here I Come

输出样例:

Come I Here World Hello

代码长度限制

16 KB

时间限制

300 ms

内存限制

64 MB

初步代码

#include
int main() {
	//1.输入字符 
	//2.记录一个单词,单词组合 
	//2.1空格隔开一个单词 
	//2.2记录最后一个单词 
	//2.2.1单词怎么记录-- 
	//2.2.2从后往前遍历找到非空格的字符输出 
	//2.2.3记录单词长度 
	//3.输出 
	//3.1正序输出 
	char str[500000];
	int i,j,l,length=0,fin=0;
	int	letter=0;
	gets(str);
	for(i=0;str[i]!='\0';i++){
		length++;//记录了数组长度 
	}
//	printf("%c\n",str[0]);
	for(j=length-1;j>=0;j--){//从后往前遍历数组 
	//记录单词长度
		if(str[j]==' '||j==0){
//			printf("%d\n",letter);
			fin=letter;
//			printf("%d\n",fin);
			for(l=j;l<=j+fin;l++){
				if(str[l]==' '){
					continue;//排除空格干扰 
					
				}
				printf("%c",str[l]);
			}
			printf(" ");
			letter=0;
			fin=0;
		}else{
				letter++;		
			}	
	}
//	printf("%d",length);
	return 0;
}

起初错误代码输出,单词中间出现了两个空格,结尾也有一个空格

Come I Here   World Hello

发现是每次遇见空格后就让输出一次空格,于是需要改为遇见多个空格只输出一次

思考后发现总是考虑数组元素是否为空格,忽略了单词长度,如果连续为空格的话单词长度肯定为是0,那么就可以给输出空格加上判定条件

if(letter!=0){
                printf(" ");
            }

相当难伺候...

最终经过多种调试,正确代码如下:

#include
int main() {
	char str[5000000];
	int i,j,l,length=0,fin=0;
	int	letter=0,kongge=0;
	gets(str);
	for(i=0; str[i]!='\0'; i++) {
		length++;//记录了数组长度
	}
	for(j=length-1; j>=0; j--) { //从后往前遍历数组
		//记录单词长度
		if(str[j]==' '||j==0) {
//			printf("%d\n",letter);
			fin=letter;
			for(l=j; l<=j+fin; l++) {
				if(letter!=0&&str[l]!=' ') {//排除空格干扰
					printf("%c",str[l]);
				}
			}
			if(letter!=0&&j!=0) {
				printf(" ");//排除输出多个空格干扰
			}
			letter=0;
			fin=0;
		} else {
			letter++;
		}
	}
	printf("\n");
	return 0;
}

 初学,大佬轻点喷QAQ

你可能感兴趣的:(c语言,数据结构)