- /*
- 问题,纪录输入的字母数,输出直方图。
- hello world
- *****
- *****
- */
- #include <stdio.h>
- #define MAXWORDS 15 // 最大单词长度
- #define MAXHIS 10 // 最大单词数量
- #define IN 1
- #define OUT 0
- int
- main(void)
- {
- int c, i, j, state, nc, nl, fn;
- int wc[MAXHIS];
- state = OUT; // 记录当前输入是否在一个单词内
- nc = 0;// 记录单词个数
- nl = 0;// 记录每个单词的长度
- fn = 0;// 超出记录的单词个数
- // 初始化wc
- for(i = 0; i < MAXHIS; ++i) {
- wc[i] = 0;
- }
- // Ctrl+D == EOF linux
- while( (c = getchar()) != EOF) {
- // 一定要先判断非字符的情况
- if (c == ' ' || c == '\\t' || c == '\\n') {
- if (state == OUT) {
- if (nc < MAXHIS) {
- // 设置单词长度的上限
- if (nl >= MAXWORDS) {
- wc[nc++] = MAXWORDS;
- } else {
- wc[nc++] = nl;
- }
- //printf("nc:%d\\n", nc);
- } else {
- // 溢出的单词个数
- ++fn;
- }
- // 重置单词长度的统计
- nl = 0;
- }
- } else {
- state = IN;
- nl++;
- }
- state = OUT;
- }
- // printf("\\n");
- // for(i = 0; i < MAXHIS; i++) {
- // printf("%d:%d\\n", i, wc[i]);
- // }
- // printf("\\n");
- // 输出直方图
- for(i = 0; i < MAXHIS; i++) {
- if (wc[i] > 0) {
- for(j = 0; j < wc[i]; j++) {
- printf("*");
- }
- printf("\\n");
- }
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/2505201512645.html
来源: http://www.codesnippet.cn/detail/2505201512645.html