从键盘上输入字符,(1)分别统计一下其中字母,数字,其他字符的个数, (2)将统计的字母,数字,其他字符的个数以柱状图的形式打印。例如
5
*****
***** 3
***** ***** 2
***** ***** *****
***** ***** *****
alp num oth
思路解析:
在统计了字母、数字和其他字符的个数之后,分别记作alpN, numN, othN。取三者最大值hMax.分别取alpN, numN, othN与hMax的绝对值h1,h2,h3。
取三个标志位,flag1,flag2,flag3,初值设为0,表示有没有打印柱形上的数字。
0表示没有打印最上面的数字,1表示已经打印了数字。
在打印的过程中,第一行打印最大值的数字,同时flag设为1,其他的就输入空格,flag设为0。
从第二行开始,进入循环阶段,循环次数为hMax,如果flag为1,则打印*****,否则,h自减,一旦为0,设立flag为1,打印个数。直到循环结束。
最后再打印相应的标识。
程序结果如下:
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);