任务是创建一个用一个空格替换多个空格的C程序,我在另一个StackOverflow问题上找到了这个解决方案:
int c;
while ((c = getchar()) != EOF) {
if (c == ' ') {
while ((c = getchar()) == ' ')
;
putchar(' ');
if (c == EOF) break;
}
putchar(c);
}
它有效,但我对第二个while循环感到困惑:
while ((c = getchar()) == ' ')
;
如何划线甚至删除任何空格?我认为它只是在遇到另一个非空白角色之前什么也没做。那么,如果一个句子有4个空格,那么我希望它变成5个空格,因为你只是用putchar(' ')
添加了另一个空格?它是否以我不知道的方式删除多余的空格?
答案 0 :(得分:2)
while ((c = getchar()) == ' ')
;
这个位跳过空格。跳过所有这些后,
putchar(' ');
放一个空格。
用一个空格替换空格组。
答案 1 :(得分:0)
getchar
一次读取一个字符。在每次迭代时,它会读取一个字符并检查它是否是空格。如果读取的字符是空格,则读取另一个空格,直到找到非空白字符。执行完循环putchar(' ');
后,打印一个空格。
答案 2 :(得分:0)
程序读取(使用getchar
)来自标准输入的字符串和输出(使用putchar
)相同的字符串到标准输出,但省略多余的空格。因此,它有效地消除了#34;额外的空间。
while
循环跳过输入中连续的空格块而不输出任何内容,然后在循环完成后输出单个空格。这就是"删除"空间。