统计输入字符的字母、数字、符号(除字母、数字、空格外的其他字符)、空格的数量并按样例格式输出直方图,输入字符以回车结束。

发布于:2022-11-27 ⋅ 阅读:(330) ⋅ 点赞:(0)

题目如图参考代码:

#include <stdio.h>
#include <stdlib.h>
int max(int a,int b){int x;
if (a>b){x=a;}
else if (b>=a){x=b;}
return x;
}
int main()
{char ch;
int digt=0,space=0,letters=0,signs=0,k=0,next1=0,next2=0,next3=0,max1=0,max2=0,max3=0;
while((ch=getchar())!='\n'){
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){letters++;}
else if(ch>='0'&&ch<='9') {digt++;}
else if(ch==' '){space++;}
else  {signs++;}}
printf("^\n");
max1=max(letters,digt);
max2=max(space,signs);
max3=max(max1,max2);
for (k=max3+1;k>0;k--){
    printf("|");

    if (letters==k-1){printf("   (%-2d)",letters);goto  next1;}
    if (letters==k){printf("   ****");letters--;}
    else if (letters!=k){printf("       ");}

   next1 :     if (digt==k-1){printf("   (%-2d)",digt);goto  next2;}
    if (digt==k){printf("   ****");digt--;}
    else if (letters!=k){printf("       ");}

  next2:      if (signs==k-1){printf("   (%-2d)",signs);goto  next3;}
    if (signs==k){printf("   ****");signs--;}
    else if (letters!=k){printf("       ");}

   next3:     if (space==k-1){printf("   (%-2d)",space);}
    if (space==k){printf("   ****");space--;}

    else if (letters!=k){printf("       ");}
    printf("\n");}
    printf("--------------------------------------->\n    字母   数字   符号   空格");
    return 0;}

 最终实验结果: