7-32 说反话-加强版 (20分)
#include<stdio.h>
#include<string.h>
int main()
{
char a[500001];
gets(a);
int i, k, m;
int j = 0;
int len = strlen(a);
//printf("%d",len);
for (i = len-1; i >= 0; i--)
{
m = i;
if (a[i] != ' ')
j++;
else if(a[i]==' ')
{
for (k = 0; k < j; k++)
{
printf("%c", a[m+1]);
m++;
}
if(k>0)
{
printf(" ");
}
j = 0;
k = 0;
}
}
for(int h=0;h<len;h++)
{
if(a[h]!=' ')
{
printf("%c",a[h]);
}
else
break;
}
}
为什么会错啊?
在前有空格时,你的程序会在最后多输出空格
因为空格不可见,所以你没发现
记住以后测试的时候要在每行的最后输出一些输入中没有的字符
比如....之类的
否则你的代码多输出了东西自己看不出来
在第2个测试点中,你的程序输出 "格式错误",原因是你没有考虑输入的第一个单词之前可能有空格。因此,在输出第一个单词之前,需要跳过输入字符串开头的所有空格。
你可以将第 16 行修改为:
while (i >= 0 && a[i] == ' ')
{
i--;
}
这将跳过输入字符串开头的所有空格,并确保第一个单词被正确处理。同时,你还需要在第 29 行之前加上 'if (j > 0)
在第2个测试点中,你的程序输出 "格式错误",原因是你没有考虑输入的第一个单词之前可能有空格。因此,在输出第一个单词之前,需要跳过输入字符串开头的所有空格。
你可以将第 16 行修改为:
while (i >= 0 && a[i] == ' ')
{
i--;
}
这将跳过输入字符串开头的所有空格,并确保第一个单词被正确处理。同时,你还需要在第 29 行之前加上 'if (j > 0)
题目呢?