7-2 找出一个字符串中出现次数最多的一个字符

发布时间 2023-11-19 00:05:13作者: 刘倩_网安2211

7-2 找出一个字符串中出现次数最多的一个字符

题目

找出一个字符串中出现次数最多的一个字符。

输入格式:
给出一个字符串,字符串的长度不大于10^6,不区分大小写, 字符串中可能包含'A'-'Z','a'-'z',' '字符。

输出格式:
分别输出出现最多次数的字符(如果为字母,输出小写字母),出现的次数,用一个空格分隔,如果有字符出现次数相同的输出较小的字符。行末尾无多余空格和换行

输入样例:
abcdefghijklmnopqrstuvwxyzA
输出样例:
a 2

代码

思路

  1. 输入一个字符串,注意此字符串可能包含空字符,则用scanf("%[^\n]", s, N)输入字符串
  2. 统计每个字符出现的次数,注意不区分大小写,则定义一个长度为27的数组int count[27]={0}来存储次数,count[0]~count[25]用来存储'a~z''A~Z'(不区分大小写),count[26]存储' '
  3. 因为'A~Z' 与 'a~z'分别对应的整数值是 65~90 和 97~122,所以定义一个整数int w=97,定义一个字符作为出现次数最多的字符m,且char m=w+i(i为数组count下标),则w+i为'a~z'对应的整数值。
  4. 定义一个整数用来存储出现次数最多的字符的出现次数,并先令它int max = count[0]
  5. 比较并输出出现次数最多的字符和次数。

第一次尝试

#include<stdio.h>.
#define N 1001
int main()
{
    char s[N] = "";
    scanf("%[^\n]", s, N);//字符串中可能包含'A'-'Z','a'-'z',' '字符
    int count[27] = { 0 };//0-26=a-z,27= 。
    /*
    在 ASCII 码中,A~Z 与 a~z 分别对应的整数值是 65~90 和 97~122。
    例如:
    'A' 的整数值是 65,'Z' 的整数值是 90,
    'a' 的整数值是 97,'z' 的整数值是 122。
    */
    for (int i = 0; s[i] != '\0'; i++)
    {
        if (s[i] == ' ')
        {
            count[26]++;
            continue;
        }
        int a = s[i];
        int t = 0;
        for (int j = 65; j < 91; j++)
        {
            if (a == j || a == j + 32)
            {
                count[t]++;
                continue;
            }
            t++;
        }
        
    }
    int w = 97;
    char m=w+0;//出现次数最多字符
    int max = count[0];//出现次数最多字符的出现次数

    for (int i = 1; i < 27; i++)
    {
        if (max < count[i])
        {
            max = count[i];
            m = w + i;
        }
        else if (max == count[i])
        {
            if (m > w + i)
            {
                m = w + i;
            }
        }
    }
    if (m - w == 26)
        printf("  %d", count[26]);
    else
        printf("%c %d", m, count[m - w]);
        return 0;
}

运行结果