7-32 说反话-加强版 (20分)

7-32 说反话-加强版 (20分)

img

img


#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)

题目呢?