我对这个宁静的代码有问题,它应该将小写字母更改为大写,并将多个空格转换为一个空间。所以它做错了什么,当我写“abcdefg”时,它会削减第一个字母,就像我写“abcdefg”它在输出“bcdefg”上。

main(){ 
int z=0,b;  

        while ( (b = getchar() ) != '\n')
        { 
        b=b-32;
            if (b>0)
            { 
                putchar(b);
            }
            else 
            {
                if (z>=2)
                { 
                    putchar(b);
                }
                else
                { 
                    z=z+1;
                    printf(" ");
                }
            }


        }
}
.

有帮助吗?

解决方案

似乎为我生成了所有的字母......你试过追踪它,找出你输入的角色的每一步都在做什么?

其他提示

空间处理有一些问题。

似乎您将在任何情况下打印一个空格(当您的getcar返回0x20时)。

您可以从中开始,以消除空间问题。 否则您有特定的有问题输入。因为我没有“第一个字母剪辑”问题。

main(){ 
int z=1,b;  

        while ( (b = getchar() ) != '\n')
        { 
        b=b-32;
            if (b>0)
            { 
                putchar(b);
                z=1;
            }
            else 
            {
                if (z>=2)
                { 
                    putchar(b);
                }
                else
                { 
                    z=z+1;
                    printf(" ");
                }
            }


        }
}
.

首先,您不应该使用像“32”这样的常量,而是让系统定义值的内容。即:b - = char('');

第二,查看函数“islower()”和“toupper()”和c将自动为您执行此操作。

考虑这样的东西:

包括

main() {

    int     flag = 0;
    char    b;

    while ((b=getchar()) != '\n') {
            if (flag && isspace(b))
                    continue;
            putchar(toupper(b));
            if (isspace(b)) {
                    flag = 1;
                    continue;
            }
            flag = 0;
    }
    putchar('\n');
.

}

输入:“BC DEF GHIJGHG 123 A1B2C3”

输出:“BC DEF GHIJGHG 123 A1B2C3”

注意:它看起来像文本框消除空格,因为输入线有很多空白。

您应该始终意识到您的边界条件。如果输入开始将是一堆空格,它仍将打印一个空格。为了消除所有领先的空格,初始化标志= 1.如果输入有尾随空格,它也会打印最终空间。为了消除那些需要略微不同的解决方案,在看到空间和另一个可打印字符后打印空间的那些。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top