无法AC,关于使用fgets碰到的问题——末尾多一个换行符

题目是输入一串字符串,包含空格,里面有多个单词,将每个单词翻转输出,并且单词之间的空格要与原文一致。
写的时候没有使用string的输入,而是选择了char数组的输入。
样例测试hello world->olleh dlrow是没有问题的,就以为没问题,但是一直通不过。
调试的时候,变量也是有些神奇,不过这个是系统bug。
直到输入了123 23 34,输出的时候321 32 这个43换行了,这就不太对劲了。多出了一个\n换行符。
查询了下,fgets获取的时候,会把换行符也放入,主要是因为它本身就是处理文件的,文件换行,自然是要带上换行符的。
这道题,硬卡了一个小时,总算是找到原因了,都要觉得测试数据坑我了,到头来,还是自己是小丑啊!

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	/*
	123  34 23
	*/
	char a[505] = {0};
	fgets(a, 505, stdin);//末尾会多拿一个'\n'
	int len = strlen(a);
	a[len-1]='\0';
	strcat(a, " ");
	for (int i = 0; i < len; i++) {
		if (a[i] == ' ') {
			for (int j = i-1; j >= 0; j--) {
				if(a[j]==' '){
					break;
				}
				cout << a[j];
			}
			if(i!=len-1){
				cout << a[i];
			}
		}
	}
	return 0;
}
posted @ 2024-05-16 15:18  Danlis  阅读(8)  评论(0编辑  收藏  举报