K&R 练习 1-8 是《The C Programming Language》(K&R)中的一道经典练习题,要求编写一个程序,将输入中的空格和制表符替换为 \t
,将连续的空格和制表符替换为一个空格,并删除行尾的空格和制表符。
这是一个文本处理类编程练习。
问题1:如何处理连续的空格和制表符? 原因:连续的空格和制表符需要被替换为一个空格,这需要一个逻辑来检测和处理这种情况。 解决方法:
#include <stdio.h>
int main() {
int c, last_char_was_space = 0;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\t') {
if (!last_char_was_space) {
putchar(' ');
last_char_was_space = 1;
}
} else {
putchar(c);
last_char_was_space = 0;
}
}
return 0;
}
问题2:如何删除行尾的空格和制表符? 原因:行尾的空格和制表符需要被删除,这需要在读取到行尾时进行特殊处理。 解决方法:
#include <stdio.h>
int main() {
int c, last_char_was_space = 0, at_end_of_line = 0;
while ((c = getchar()) != EOF) {
if (c == '\n') {
at_end_of_line = 0;
}
if (c == ' ' || c == '\t') {
if (!last_char_was_space && !at_end_of_line) {
putchar(' ');
last_char_was_space = 1;
}
} else {
putchar(c);
last_char_was_space = 0;
at_end_of_line = (c == '\n');
}
}
return 0;
}
通过上述代码和解释,可以有效地改进 K&R 练习 1-8,使其能够正确处理连续的空格和制表符,并删除行尾的空格和制表符。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云