1122: 4101 统计字符数

该程序旨在找出由a-z组成的字符串中出现次数最多的字符,并在有多个字符出现次数相同时,选择ASCII码最小的字符。原代码的问题在于max和p变量没有在每次处理新字符串时重置,修正后的代码将它们的初始化放在了正确的位置,确保每个输入字符串都能得到正确的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

判断一个由a~z这26个字符组成的字符串中哪个字符出现的次数最多。

输入

第1行是测试数据的组数n,每组测试数据占1行,是一个由a-z这26个字符组成的字符串,每组测试数据之间有一个空行,每行数据不超过1000个字符且非空。

输出

n行,每行输出对应一个输入。一行输出包括出现次数最多的字符和该字符出现的次数,中间是一个空格。
如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个字符。

样例输入 复制

2
abbccc

adfadffasdf

样例输出 复制

c 3
f 4

我的错误的代码

#include<stdio.h>
#include<string.h>
int main()
{
    char z[30]="abcdefghijklmnopqrstuvwxyz";
    int n;
    int max=0;
    int p=0;
    while(scanf("%d",&n)!=EOF)
    {
         p=0;
        int zz[30];
        memset(zz,0,sizeof(zz));
        char input[1005];
        for(int i=0;i<n;i++)
        {
            scanf("%s\n",input);
            for(int j=0;j<strlen(input);j++)
            {
                for(int k=0;k<26;k++)
                {
                    if(input[j]==z[k])
                    {
                        zz[k]++;
                    }
                }
            }
            for(int m=0;m<26;m++)
            {
               
                if(zz[m]>max)
                {
                  max=zz[m];
                  p=m;
                }
            }
            printf("%c %d\n",z[p],max);
        }
    }
}

 经过好好cjy老师的指导的修正后的代码

#include<stdio.h>
#include<string.h>
int main()
{
    char z[30]="abcdefghijklmnopqrstuvwxyz";
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=0;i<n;i++)
        {
        int max=0;
        int p=0;
        int zz[30];
        memset(zz,0,sizeof(zz));
        char input[1005];
            scanf("%s\n",input);
            
            for(int j=0;j<strlen(input);j++)
            {
                for(int k=0;k<26;k++)
                {
                    if(input[j]==z[k])
                    {
                        zz[k]++;
                    }
                }
            }
            for(int m=0;m<26;m++)
            {
               
                if(zz[m]>max)
                {
                  max=zz[m];
                  p=m;
                }
                else
                continue;
            }
            printf("%c %d\n",z[p],max);
        }
    }
}

主要改正了哪些地方呢

1.max 和p重置的地方 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值