C语言习题1.分别统计一下其中字母,数字,其他字符的个数。将统计的字母,数字,其他字符的个数以柱状图的形式打印

从键盘上输入字符,(1)分别统计一下其中字母,数字,其他字符的个数, (2)将统计的字母,数字,其他字符的个数以柱状图的形式打印。例如

  5

*****

*****     3

*****   *****     2

*****   *****   *****

*****   *****   *****

 alp     num     oth

思路解析:

在统计了字母、数字和其他字符的个数之后,分别记作alpN, numN, othN。取三者最大值hMax.分别取alpN, numN, othNhMax的绝对值h1,h2,h3

取三个标志位,flag1,flag2,flag3,初值设为0,表示有没有打印柱形上的数字。

0表示没有打印最上面的数字,1表示已经打印了数字。

在打印的过程中,第一行打印最大值的数字,同时flag设为1,其他的就输入空格,flag设为0

从第二行开始,进入循环阶段,循环次数为hMax,如果flag1,则打印*****,否则,h自减,一旦为0,设立flag1,打印个数。直到循环结束。

最后再打印相应的标识。

程序结果如下:

 

  1 void print_Column(char*str)
  2 {
  3     //定义字母,数字,其他字符个数
  4     int alpN = 0, numN = 0, othN = 0;
  5     //hMax为三者中最大的数,h1,2,3分别为距离hMax的值
  6     int hMax = 0, h1 = 0, h2 = 0, h3 = 0;
  7     //指示标志,0表示没有打印最上面的数字,1表示已经打印了数字
  8     int flag1 = 0, flag2 = 0, flag3 = 0;
  9     int i = 0;
 10     for (i = 0; str[i] != '\0'; i++)
 11     {
 12         if (('a' <= str[i] && str[i] <= 'z') || ('A' <= str[i] && str[i] <= 'Z'))
 13         {
 14             alpN++;
 15         }
 16         else if ('0' <= str[i] && str[i] <= '9')
 17         {
 18             numN++;
 19         }
 20         else
 21         {
 22             othN++;
 23         }
 24     }
 25     printf("alpN=%d,numN=%d,othN=%d", alpN, numN, othN);
 26 
 27     //计算hMax
 28     hMax = othN > (alpN > numN ? alpN : numN) ? othN : (alpN > numN ? alpN : numN);
 29     //计算距离差值
 30     h1 = abs(alpN - hMax);
 31     h2 = abs(numN - hMax);
 32     h3 = abs(othN - hMax);
 33     printf("\nprint column.....\n");
 34 
 35     //开始打印
 36     //打印最上面的数字
 37     if (h1 == 0)
 38     {
 39         printf("  %d  ", alpN);
 40         flag1 = 1;
 41     }
 42     else
 43     {
 44         printf("      ");
 45     }
 46     printf("\t");
 47     if (h2 == 0)
 48     {
 49         printf("  %d  ", numN);
 50         flag2 = 1;
 51     }
 52     else
 53     {
 54         printf("      ");
 55     }
 56     printf("\t");
 57     if (h3 == 0)
 58     {
 59         printf("  %d  ", othN);
 60         flag3 = 1;
 61     }
 62     else
 63     {
 64         printf("      ");
 65     }
 66     printf("\n");
 67 
 68     //开始循环,总共有 hMax 遍
 69     for (i = 1; i <= hMax; i++)
 70     {
 71         //针对alp的打印
 72         if (flag1)
 73         {
 74             printf("*****");
 75         }
 76         else
 77         {
 78             h1--;
 79             if (h1 == 0)  //表示要打印数字了
 80             {
 81                 printf("  %d  ", alpN);
 82                 flag1 = 1;
 83             }
 84             else
 85             {
 86                 printf("     ");
 87             }
 88         }
 89         printf("\t");
 90 
 91         //针对num的打印
 92         if (flag2)
 93         {
 94             printf("*****");
 95         }
 96         else
 97         {
 98             h2--;
 99             if (h2 == 0)  //表示要打印数字了
100             {
101                 printf("  %d  ", numN);
102                 flag2 = 1;
103             }
104             else
105             {
106                 printf("     ");
107             }
108         }
109         printf("\t");
110 
111         //针对oth的打印
112         if (flag3)
113         {
114             printf("*****");
115         }
116         else
117         {
118             h3--;
119             if (h3 == 0)  //表示要打印数字了
120             {
121                 printf("  %d  ", othN);
122                 flag3 = 1;
123             }
124             else
125             {
126                 printf("     ");
127             }
128         }
129         //打印完一行就换行
130         printf("\n");
131     }
132     printf("  alp  \t");
133     printf("  num  \t");
134     printf("  oth  \t");
135     printf("\n");
136 
137 }
138 ---------------------------------------------------------------------------------------------------------------------------
139 在主函数中的调用:
140     char str[81];
141     printf("input a string:");
142     gets(str);
143     print_Column(str);

C语言习题1.分别统计一下其中字母,数字,其他字符的个数。将统计的字母,数字,其他字符的个数以柱状图的形式打印_第1张图片

你可能感兴趣的:(C语言习题1.分别统计一下其中字母,数字,其他字符的个数。将统计的字母,数字,其他字符的个数以柱状图的形式打印)