统计字母和数字,打印出直方图

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #include<ctype.h>
 5 #include<algorithm>
 6 using namespace std;
 7 int main(int argc, char* argv[])
 8 {
 9     char ch[1024];
10     gets(ch);
11     //puts(ch);
12     int alp=0,dig=0,oth=0;
13     int len=strlen(ch);
14     for(int i=0 ; i<len ; ++i)
15     {
16         if(isdigit(ch[i]))
17             ++dig;
18         else if(isalpha(ch[i]))
19             ++alp;
20         else
21             ++oth;
22     }
23     int sum[3];
24     sum[0]=dig,sum[1]=alp,sum[2]=oth;
25     sort(sum,sum+3);
26     int MAX=sum[2];                //找到最大值
27     char* A[13];
28     for(int i=0 ; i<13 ; ++i)
29         A[i]=(char* )calloc(MAX,sizeof(char));
30 
31     for(int i=0 ; i<MAX ; ++i)        //先赋值位空格
32         for(int j=0 ; j<13 ; ++j)
33             A[j][i]=' ';            //【warning】动态划分的数字是先列后行,注意转换
34 
35 
36     for(int i=0 ; i<3 ; ++i)        //填上dig
37         for(int j=MAX-dig ; j<MAX ; ++j)
38             A[i][j]='*';
39 
40     for(int i=5 ; i<8 ; ++i)        //填上alp
41         for(int j=MAX-alp ; j<MAX ; ++j)
42             A[i][j]='\3';
43 
44     for(int i=10 ; i<13 ; ++i)        //填上oth
45         for(int j=MAX-oth ; j<MAX ; ++j)
46             A[i][j]='\2';
47     printf("%3d  %3d  %3d\n",dig,alp,oth);
48     for(int i=0 ; i<MAX ; ++i)
49     {
50         for(int j=0 ; j<13 ; ++j)
51             printf("%c",A[j][i]);
52         printf("\n");
53     }
54     printf("dig  alp  oth\n");
55     printf("%3d  %3d  %3d\n",dig,alp,oth);
56     system("pause");
57     return 0;
58 }

 

posted on 2015-04-28 14:33  Evence  阅读(245)  评论(0编辑  收藏  举报