这是K&R演习(1-13)......
"编写一个程序,在其输入中打印单词长度的直方图.可以很容易地绘制水平条形图的直方图;垂直方向更具挑战性."
该部分是关于数组的,说实话,我不确定我是否完全理解它.到目前为止,一切都很容易掌握,但事实并非如此.
无论如何我首先尝试用水平条做直方图.一旦我把它弄下来,我会尝试垂直,但是现在我甚至不确定从哪个版本开始.(我睡在上面,醒了,仍然无法得到它.)
我画了一个程序输出内容的例子:
----------------------------------------------------------------
001|XX
002|XXXX
003|X
004|XXXXXXXXXX
005|XXXXXXXXXXXXXXXXXXXXXXXXX
006|XXXX
007|X
008|
009|XXXXXXXXX
010|XXX
>10|XXXX
----------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
并试图将它(程序)分成几部分.这就是我想出的:
- 打印顶部边框
- 打印类别,打印X每个时间条件都是正确的,打印NEWLINE,REPEAT.
- 打印底部边框
但我想的越多,我认为它的工作方式就越少(因为它一次只能getchar()通过一个角色,而且无法重新将X放入正确的类别.)或者...... .
......我真的很困惑,我将如何解决这个问题.据我所知,我已经能够获得代码明智:
#include <stdio.h>
#define MAXWORDLENGTH 10
// print a histogram of the length of words in input. horizontal bar version
int main(void)
{
int c;
while ((c = getchar()) != EOF) {
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助启发我吗?不一定是代码,可能只是伪代码,或者一些"智者的话",关于我需要做什么,想什么,或者其他什么.这只是路上真正的大石头,我想通过它:/.
(我会在30分钟后回来查看)
这是我的原始代码:
#include <stdio.h>
#define IN 1 // inside a word
#define OUT 0 // outside a word
// program to print input one word per line
int main(void)
{
int c, state;
state = OUT;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\n' || c == '\t') {
state = OUT;
printf("\n");
}
else if (state == OUT) {
state = IN;
}
if (state == IN) {
putchar(c);
}
}
return …Run Code Online (Sandbox Code Playgroud) c ×2