"Write a program to copy its input to its output, replacing each string of one or more blanks by a single blank."
我假设他的意思是输入类似...
We(blank)(blank)(blank)go(blank)to(blank)(blank)(blank)the(blank)mall!
...并像这样输出:
We(blank)go(blank)to(blank)the(blank)mall!
这可能比我想象的要容易,但我似乎还是想不通。我真的不想要代码...更多的是伪代码。
还有,我应该怎么看这个?我非常确定我编写的任何程序都至少需要一个 variable
、一个 while
循环、一对 if
语句,并且将同时使用 getchar()
和 putchar()
函数...但除此之外我不知所措。我还没有真正的程序员思路,所以如果你能给我一些关于我应该如何看待“问题”的建议,那就太好了。
(请不要提出else
,我在书中没有讲到那么多,所以现在这超出了我的范围。)
最佳答案
将您的程序视为一台机器,它在迭代输入时在不同状态之间移动。
它一次读取输入的一个字符。如果它看到的不是空白,它就打印它看到的字符。如果它看到一片空白,它就会转移到不同的状态。在该状态下,它会打印一个空白,然后如果它看到空白,不会打印它们。然后,它继续读取输入,但忽略它看到的所有空白——直到它遇到一个不是空白的字符,此时它转换回第一个状态。
(这个概念被称为有限状态机,顺便说一句,很多理论计算机科学工作已经深入到他们能做什么和不能做什么。Wikipedia 可以告诉你更多,尽管可能比您正在寻找的细节更复杂。;))
关于c - K&R 练习 1-9 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3305735/