Exercise 1-9. Write a program to copy its input to its output, replacing each string of one or more blanks by a single blank.
这是课文中复制-输出程序例子的一个变形,作者要求我们做一点点变形,将复制过程中遇到的单个空格或者连续多个空格都只用一个空格来输出代替。
这次我们首先贴出完整代码:
#include <stdio.h>
#define NEW_BLANK 1
#define NOT_NEW_BLANK 0
int main(void) {
int c, cState;
cState = NEW_BLANK;
while((c = getchar()) != EOF) {
if (c != ' ') {
putchar(c);
cState = NEW_BLANK;
}
else {
if (cState == NEW_BLANK) {
putchar(c);
cState = NOT_NEW_BLANK;
}
}
}
return 0;
}
接着我们分析一下。
首先我们定义了两个宏,用来表示是否遇到了新的空格(串):
#define NEW_BLANK 1 //表示进入了一个新的空格(串)
#define NOT_NEW_BLANK 0 //表示在一个空格(串)之内,也就是上一个字符也是空格
然后进入 main() 函数,我们仍然仿照例子用 while 循环进行持续复制输出。
但是因为需要忽略空格串中多余的空格,我们在 while 循环进入之前

该博客介绍了如何编写一个C语言程序,该程序将输入中的连续空格替换为单个空格。通过使用while循环和状态变量cState,程序能够智能地识别并仅输出一个空格,从而实现空格压缩的功能。
最低0.47元/天 解锁文章
1516

被折叠的 条评论
为什么被折叠?



