c - K&R 练习 1-9 (C)

标签 c

"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/

相关文章:

c++ - 编写MPI程序: sum in a the array with two process

c - 如何使用RL_ARM lib来设计TCP项目

C程序没有给出正确的输出

c - *( (int *)ptr+1) 的含义

c - 将 C 代码中的左大括号移动到下一行?

c - c中的snmpbulkwalk

c - 当我插入较大的数字时程序崩溃

CUDA 如何在主机代码中声明常量内存时访问设备内核中的常量内存?

c - 后增量如何在c中工作?

c - 如果使用 Glade,GtkDrawingArea 在绘制时不会更新