免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2206 | 回复: 1
打印 上一主题 下一主题

[C] k&r圣经上的一个习题答案,高手点评一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-01 16:48 |只看该作者 |倒序浏览
本帖最后由 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. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2010-08-01 21:47 |只看该作者
回复 1# pxbfeiniao
要试着学会充分利用函数库。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP