+ -
当前位置:首页 → 问答吧 → k&r圣经上的一个习题答案,高手点评一下

k&r圣经上的一个习题答案,高手点评一下

时间:2010-08-01

来源:互联网

本帖最后由 pxbfeiniao 于 2010-08-01 17:36 编辑

我是一个初学者,正在研读K&R圣经,发现其中的习题并不简单,常常要考虑良久才能完成。下面的一个习题答案大家点评一下(介绍数组那章):
编写一个程序,打印输入中单词长度的直方图。我的答案用到了指针,似乎有点不合规则。
  1. [code]
  2. /*
  3. 这是K&R圣经上的一个习题解答。
  4. 题目:
  5. 编写一个程序,打印输入中单词的直方图。
  6. */

  7. #include <stdio.h>
  8. #include <stdlib.h>

  9. int main(void)
  10. {
  11.     char c;
  12.     int i = 0;
  13.     int j = 0;
  14.     int k = 0;
  15.     int r = 0;
  16.     int s = 0;
  17.     int t = 0;

  18.     int m[100];     //保存非字母字符的输入次序。
  19.     int n[100];     //保存两个非字母字符之间的间隔长度。

  20.     int o[100];     //保存“真正”单词的长度
  21.     int *p = o;

  22.     m[0] = 0;

  23.     while ((c = getchar()) != EOF) {
  24.         ++i;
  25.         if (c == ' ' || c == '\n' || c == '\t'
  26.                      || c == ','  || c == '.'
  27.                      || c == '!'  || c == '?') {
  28.             ++j;
  29.             m[j] = i;
  30.         }
  31.     }

  32.     for (k = 0; k < j; ++k) {
  33.         n[k] = m[k+1]-m[k]-1;
  34.         if (n[k]) {         //过滤零长度单词和非字母“单词”。
  35.             *p =n[k];
  36.             ++p;
  37.             ++s;
  38.         }
  39.     }

  40.     for (;t<s;++t) {
  41.         printf("\n the word's length of NO.%d is :", t+1);
  42.         r = 0;
  43.         for (;r<o[t];r++) {
  44.             printf("*");
  45.         }
  46.         printf("\n");
  47.     }

  48.     return 0;
  49. }
复制代码

作者: pxbfeiniao   发布时间: 2010-08-01

回复 pxbfeiniao
要试着学会充分利用函数库。

作者: donglongchao   发布时间: 2010-08-01

相关阅读 更多