打印統計結果的圖形,c++
#include<stdio.h> #define MAXHIST 15//nc 轉 len 常量 #define MAXWORD 11//有效單詞長度 #define IN 1//單詞內 #define OUT 0//單詞外 main() { int c, i, nc, state;//字符,for,單詞當前長,單詞內外, int len;//處理過的nc, int maxvalue;//輸入的最長單詞 int ovflow;//超出範圍的單詞個數 int wl[MAXWORD];//每種詞長的個數, state = OUT; nc = 0; ovflow = 0; for(i=0; i<MAXWORD; i++) wl[i] = 0;//初始化單詞長度 while((c=getchar()) != EOF) //輸入單詞 { if(c==' '||c=='\n'||c=='\t')//輸入是空白符時 { state = OUT;//更改成在單詞外 if(nc > 0 && nc < MAXWORD)//單詞長度屬於這個範圍則統計 wl[nc]++; else ovflow++;//超出範圍統計 nc = 0;//輸入詞長清理 } else if(state == OUT)//輸入是非空字符時,且以前在單詞外 { state = IN;//更改成單詞內, nc = 1;//基數單詞字符1個, } else nc++;//在單詞內且非空字符,單詞長度累加 } maxvalue = 0; for(i=1; i<MAXWORD; i++) if(wl[i]>maxvalue)//最長的單詞, maxvalue = wl[i]; for(i=1;i<MAXWORD; i++) { printf("%-5d - %5d :", i, wl[i]);//單詞長度, 個數, if(wl[i]>0) { if((len=wl[i]*MAXHIST/maxvalue) <= 0)//處理單詞個數,的長度, len = 1; } else len = 0; while(len>0) { putchar('*');//個數直方圖, len--; } putchar('\n'); } if(ovflow>0) printf("超出範圍的單詞數%d 不能夠大於%d\n", ovflow, MAXWORD); }
輸入多個單詞, 每種長度輸出一行,即長度, 個數, 個數的直方圖。數組
統計輸入每一個字符出現的頻率ascii碼的字符個數是128個,能夠用arr[0 - 127],累加code
#include<stdio.h> #include <ctype.h>//isprint 判斷是否爲字符 #define MAXHIST 15//nc 轉 len 常量 #define MAXCHAR 128//有效字符集 main() { int c, i;//輸入字符,for int len;//處理過的個數, int maxvalue;//輸入的最長單詞 int cc[MAXCHAR];//每種字符的個數, for(i=0; i<MAXCHAR; i++) cc[i] = 0;//初始化字符個數 while((c=getchar()) != EOF) //輸入字符 if(c < MAXCHAR)//屬於字符集 cc[c]++;//累加 maxvalue = 0; for(i=1; i<MAXCHAR; i++) if(cc[i]>maxvalue)//最大的字符, maxvalue = cc[i]; for(i=1;i<MAXCHAR; i++)//0‘\0’是沒法輸入的 { if(isprint(i))//是否字符 printf("%-5d - %c - %5d :", i, i, cc[i]);//第幾個,字符,字符頻率 else printf("%-5d - %5d:", i, cc[i]);//非字符 if(cc[i]>0) { if((len=cc[i]*MAXHIST/maxvalue) <= 0)//處理字符輸入的次數, len = 1; } else len = 0; while(len>0) { putchar('*');//次數直方圖, len--; } putchar('\n'); } }
巧用數組,a[32]++, 這樣就統計數空格的個數了,ci