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

 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 }

 

转载于:https://www.cnblogs.com/Evence/p/4462950.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值