C语言 练习7-根据字符个数,从高到低输出柱状图

在这里插入图片描述
注:既然是从大到小,那么下面的柱子名称也得跟着变才行

思路

总之就是各种判断,我感觉写的好啰嗦(105行,主要是判断那一块儿占得多,我是按行输出的,每一行都有9种输出的可能,所以用了好多else if),不知道有没有大佬有简单点的写法.

#include <stdio.h>
#include <stdlib.h>

void sort(int *p,char **pc) //排数据的时候同时排名称
{
	int i,j,tmp;
	char *tmp2;
	for(i=0; i<3; i++)
	{
		for(j=0; j<3-i; j++)  
		{
			if(p[j]<p[j+1])		
			{
				tmp=p[j];
				tmp2=pc[j];

				p[j]=p[j+1];
				pc[j]=pc[j+1];

				p[j+1]=tmp;
				pc[j+1]=tmp2;
			}
		}
	}
}

int main()
{
	int i,alp,num,oth;
	char a[100];//存放字符串
	char *pa;

	int c[3];//c存放三个统计数据
	int *pc;

	char cc[3][4]={"alp","num","oth"};
	char **pcc;

	pcc=(char**)malloc(sizeof(char*)*3);
	pc=(int*)malloc(sizeof(int*)*3);//申请统计数据指针数组

	while(gets(a))
	{
		pa=a;

		for(i=0,alp=0,num=0,oth=0; i<100; i++)//统计个数
		{
			if(pa[i]=='\0') break;
			if('A'<=pa[i] && pa[i]<='Z' || 'a'<=pa[i] && pa[i]<='z')
			{
				alp++;
			}else if('0'<=pa[i] && pa[i]<='9'){
				num++;
			}else{
				oth++;
			}
		}
		printf("alp=%d num=%d oth=%d\n",alp,num,oth);
		c[0]=alp; c[1]=num; c[2]=oth;
		for(i=0; i<3;i++)//初始化统计数据指针数组
		{
			pc[i]=c[i];
		}
		for(i=0; i<3;i++)//初始化数据名称指针数组
		{
			pcc[i]=cc[i];
		}

		sort(pc,pcc);

		for(i=0; i<=pc[0]; i++)
		{
			if(i==0)
			{
				if(pc[0]==pc[1] && pc[1]==pc[2])
				{
					printf("  %d       %d       %d\n",pc[0],pc[0],pc[0]);
				}else if(pc[0]==pc[1] && pc[1]!=pc[2]){
					printf("  %d       %d\n",pc[0],pc[0]);
				}else{
					printf("  %d\n",pc[0]);
				}
			}else if(pc[1]<pc[0]-i){
				printf("*****\n");
			}else if(pc[1]==pc[0]-i && pc[0]-i>pc[2]){
				printf("*****     %d\n",pc[1]);
			}else if(pc[1]==pc[0]-i && pc[0]-i==pc[2]){
				printf("*****     %d       %d\n",pc[1],pc[2]);
			}else if(pc[2]<pc[0]-i){
				printf("*****   *****\n");
			}else if(pc[2]==pc[0]-i){
				printf("*****   *****     %d\n",pc[2]);
			}
			else{
				printf("*****   *****   *****\n");
			}
		}
		for(i=0; i<3;i++)//打印数组
		{
			printf(" %s    ",pcc[i]);
		}
		printf("\n-----------------------\n");
	}
	system("pause");
}

结果:

在这里插入图片描述

发布了35 篇原创文章 · 获赞 2 · 访问量 922

猜你喜欢

转载自blog.csdn.net/qq_45735810/article/details/103002844
今日推荐