已关闭。此问题为opinion-based。目前不接受回答。
**要改进此问题吗?**更新此问题,以便editing this post可以使用事实和引文来回答。
上个月关门了。
社区上个月审查了是否重新打开这个问题,并将其关闭:
原始关闭原因未解决
Improve this question的
这是一个C程序,它将输入复制到输出,将每个包含一个或多个空格的字符串替换为单个空格。我不知道当程序启动时,还没有先前的值时,最好的方法是什么。
我得出了以下结论:
#include <stdio.h>
void main() {
int actual, previous = -1;
while((actual = getchar()) != EOF) {
if(!(previous == ' ' && actual == ' ')) {
putchar(actual);
previous = actual;
}
}
}
字符串
这是可行的,但是我被教导你不应该将变量初始化为随机值。另一种选择是使用do-while循环,但是如果程序得到一个空文件,它将毫无意义地执行if语句。
3条答案
按热度按时间mwkjh3gx1#
我只需要设置一个可以检查的布尔标志,如果我们不是在第一次迭代中,并且实际字符和前一个字符都是空格,我们可以跳过打印字符和更新前一个字符,并将
first_char
标志设置为false
。这样
previous
在初始化之前就不会被使用。字符串
8wigbo562#
你可以使用一个
in_spaces
变量来跟踪你是否在一个空格区域中阅读输入。in_spaces
被初始化为0
,或者false,因为你不是从一组空格开始阅读的。如果你在一组空格中,一个空格被读取,只需继续读取下一个字符。否则你总是想打印该字符。如果该字符是一个空格,你在一组空格中,所以
in_spaces
应该设置为1
,或者true。否则该字符不是空格,因此您不在一组空格中,并且in_space
应设置为0
。字符串
sg3maiej3#
如前所述,
void main()
是不明智的...如果你关心的是重复的空格(0x 20),那么
-1
是任意的。同样任意,但不那么不和谐的是0
。(事实上,你可以使用除了0x 20之外的任何值!).将代码折叠到
for()
循环中可以减少代码量。有用的注解总是有用的。测试代码提供了几个字符串,用于测试重复SP的前导、尾随和中间字符串运行。字符串
输出量:
型
请注意
prvCh
的初始化为~' '
..使用
getchar()
和EOF
的变化应该是显而易见的。