以下是 Ritchie&Kernighan 的《C 编程语言》一书中练习 1-9 的内容:
编写一个程序,将其输入复制到其输出,用一个空格替换每个包含一个或多个空格的字符串。
对我来说,解决这个问题的最简单方法是写作
int single_byte = getchar();
while (single_byte != EOF) {
putchar(single_byte);
if (single_byte == ' ')
while ((single_byte = getchar()) == ' ')
;
else
single_byte = getchar();
}
尽管有人告诉我(昨晚在irc.freenode.netwhile
的 #c 频道中),通过在保存的最后一个字符和刚刚读取的字符之间进行比较,摆脱嵌套会更具可读性。我的想法是这样的:
int current_byte = getchar();
if (current_byte == EOF)
return 1;
putchar(current_byte);
int previous_byte = current_byte;
while ((current_byte = getchar()) != EOF) {
if (current_byte == ' ' && previous_byte == ' ')
;
else
putchar(current_byte);
previous_byte = current_byte;
}
这根本不满足我:从第一个if
语句开始(对于没有什么可读的情况)。while
另外,我希望我可以在循环内部之前推送最后两行;我越不应该将开始与执行的其余部分区分开来,我就越快乐!