- 论坛徽章:
- 0
|
本帖最后由 pxbfeiniao 于 2010-08-01 17:36 编辑
我是一个初学者,正在研读K&R圣经,发现其中的习题并不简单,常常要考虑良久才能完成。下面的一个习题答案大家点评一下(介绍数组那章):
编写一个程序,打印输入中单词长度的直方图。我的答案用到了指针,似乎有点不合规则。
- [code]
- /*
- 这是K&R圣经上的一个习题解答。
- 题目:
- 编写一个程序,打印输入中单词的直方图。
- */
- #include <stdio.h>
- #include <stdlib.h>
- int main(void)
- {
- char c;
- int i = 0;
- int j = 0;
- int k = 0;
- int r = 0;
- int s = 0;
- int t = 0;
- int m[100]; //保存非字母字符的输入次序。
- int n[100]; //保存两个非字母字符之间的间隔长度。
- int o[100]; //保存“真正”单词的长度
- int *p = o;
- m[0] = 0;
- while ((c = getchar()) != EOF) {
- ++i;
- if (c == ' ' || c == '\n' || c == '\t'
- || c == ',' || c == '.'
- || c == '!' || c == '?') {
- ++j;
- m[j] = i;
- }
- }
- for (k = 0; k < j; ++k) {
- n[k] = m[k+1]-m[k]-1;
- if (n[k]) { //过滤零长度单词和非字母“单词”。
- *p =n[k];
- ++p;
- ++s;
- }
- }
- for (;t<s;++t) {
- printf("\n the word's length of NO.%d is :", t+1);
- r = 0;
- for (;r<o[t];r++) {
- printf("*");
- }
- printf("\n");
- }
- return 0;
- }
复制代码 |
|