题目是输入一串字符串,包含空格,里面有多个单词,将每个单词翻转输出,并且单词之间的空格要与原文一致。
写的时候没有使用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;
}
标签:AC,int,len,fgets,换行符,末尾,输入
From: https://www.cnblogs.com/danlis/p/18196023