孤帆sail 2020-12-02 21:48 采纳率: 0%
浏览 556

c语言判断字符串中字母的多少和判断哪个字母出现次数最多?

输入字符串(长度小于50),统计每个大写字母出现的次数,输出出现次数最高的大写字母及其出现次数。如果出现次数最高的大写字母有多个,则输出ASCII码值最小的字母及其次数。

以下是我写的代码但是运行得不出我想要的结果。

#include<stdio.h>
int main()
{
	char a;
	int c[26] = { 0 };
	int b[26] = { 0 };
	int i=0, g, h, t, l;
	printf("请输入长度不超过50的大写字母:");
	while ((a = getchar()) != '\n')
	{
		if (a == 'A')
			c[0] = b[0]++;
		if (a == 'B')
			c[1] = b[1]++;
		if (a == 'C')
			c[2] = b[2]++;
		if (a == 'D')
			c[3] = b[3]++;
		if (a == 'E')
			c[4] = b[4]++;
		if (a == 'F')
			c[5] = b[5]++;
		if (a == 'G')
			c[6] = b[6]++;
		if (a == 'H')
			c[7] = b[7]++;
		if (a == 'I')
			c[8] = b[8]++;
		if (a == 'J')
			c[9] = b[9]++;
		if (a == 'K')
			c[10] = b[10]++;
		if (a == 'L')
			c[11] = b[11]++;
		if (a == 'M')
			c[12] = b[12]++;
		if (a == 'N')
			c[13] = b[13]++;
		if (a == 'O')
			c[14] = b[14]++;
		if (a == 'P')
			c[15] = b[15]++;
		if (a == 'Q')
			c[16] = b[16]++;
		if (a == 'R')
			c[17] = b[17]++;
		if (a == 'S')
			c[18] = b[18]++;
		if (a == 'T')
			c[19] = b[19]++;
		if (a == 'U')
			c[20] = b[20]++;
		if (a == 'V')
			c[21] = b[21]++;
		if (a == 'W')
			c[22] = b[22]++;
		if (a == 'X')
			c[23] = b[23]++;
		if (a == 'Y')
			c[24] = b[24]++;
		if (a == 'Z')
			c[25] = b[25]++;

		i++;
	}
	if (i>50)
		printf("请重新输入");
	for (l = 0; l<26; l++)
		printf("%d", b[l]);
	for (g = 0; g<25; g++)
		for (h = 0; h<25 - g; h++)
		{
			if (b[h]<b[h + 1])
			{
				t = b[h];
				b[h] = b[h + 1];
				b[h + 1] = t;
			}
		}
	printf("\n");
	for (l = 0; l<26; l++)
		printf("%d", b[l]);
	g = 0;
	for (g; g < 26; g++)
	{
		a = 65;
		for (h = 0; h < 26; h++)
		{
			printf("%c", a);
			if (b[g] == c[h] && c[h] != 0)
			{
				printf("%c", a);
			}
			a++;
		}
		printf("\n");
	}
}
  • 写回答

1条回答 默认 最新

  • qq_25376897 2020-12-03 00:01
    关注
    #include <stdio.h>
    
    int main(void) { 
        char a;
        int i=0,max=0;//i用来判断输入串长度是否超过了50
        int b[26] = { 0 };
        printf("请输入长度不超过50的大写字母:");
    	while ((a = getchar()) != '\n'){
    	    i++;
    	    if(i>50){
    	        printf("长度超过50,请重新输入");
    	        return 0;
    	    }
    	    if(a>='A'&&a<='Z'){//属于A-Z26个大写字母
    	        b[a-'A']++; //a-'A'  ASCII码进行相减,差值拿去对应下标
    	    }
    	}
    	
    	//max:出现次数的最大值
    	for(i=0;i<26;i++){
    	    if(b[i]>max){
    	        max = b[i];
    	    }
    	}
    	
    	if(max==0){
    	    printf("输入的数据中没有大写字母");
    	}else{
    	    for(i=0;i<26;i++){
    	        if(b[i]==max){//b数组表示按顺序从A到Z的次数,所以第一个匹配到的就是ASCII最小的
    	            printf("%c%d\n", i+'A',b[i]);
    	            break;
    	        }
    	    }
    	}
    	
    	return 0;
    }
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料