2 jiankeabcd jiankeabcd 于 2016.05.11 20:04 提问

c语言 一个输出出现次数最多的字母的程序

字母不区分大小写
输出格式:出现的次数 该字母
如果有复数个出现次数最多的字母,就按字母排列顺序输出


输入
One Two Buckle My Shoe
输出
3 eo

输入
Once upon a time,there lived a manwhose name wos Lip van Winkle.
输出
8 e

 #include<stdio.h>
#include<string.h>

typedef struct alphabet
{
    char alphabet[99];
    int point;
}Alp;

void toLowerCase(char a[])
{
    int i;
    for(i=0;i<strlen(a);i++){
        if(a[i]>='A'&&a[i]<='Z'){a[i]=a[i]+32;}
    }
}

int main(void)
{
    int i;
    char input[99];
    char convert[99];
    Alp alp[99];
    while(scanf("%s",input)!=EOF){
        toLowerCase(input);
        for(i=0;i<strlen(input);i++){
            alp.alphabet[i]=input[i];
            alp.point[i]++;
        }
    }
    printf("%d %s",alp.point,alp.alphabet);
    return 0;
}

这个是我自己写的(写到一半实在编不下去了),还是不要看比较好,不然会干扰大家思维

6个回答

caozhy
caozhy   Ds   Rxr 2016.05.11 20:14
havedream_one
havedream_one   2016.05.11 20:22
 #include <stdio.h>

void main(){
    //char str[100] = "Once upon a time,there lived a manwhose name wos Lip van Winkle.";
    char str[100] = "One Two Buckle My Shoe";
    int count[26] = {0};//存储出现次数最多的。
    int i = 0;
    int max = 0;
    while(str[i] != '\0'){
        if(str[i] >= 'a' && str[i] < 'z'){ //小写字母
            count[str[i] - 'a'] ++;
        }else if(str[i] >= 'A' && str[i] < 'Z'){//大写字母
            count[str[i] + 32 - 'a'] ++;
        }
        i++;
    }

    for(i = 0 ; i < 26; i++){
        printf("%c:%d\n",i+'a',count[i]);
        if(count[i] > max){
            max = count[i];
        }
    }
    printf("字母最多出现%d次,分别是:\n",max);
    for(i = 0; i < 26; i++){
        if(count[i] == max){
            printf("%c\n",i+ 'a');
        }
    }
}
herozhangbz
herozhangbz   2016.05.11 21:10

建立一个二维数组进行匹配,找到zm[][1]最值对应的zm[][0]就是出现次数最多的字母。我下面这个只能帮你匹配到两个字母出现的次数相同切最多,如果3个及以上的字母出现次数相同且最多只能输出前两个

```
 char zm[26][2]={{'a',0},{'b',0},{'c',0},{'d',0},{'e',0},{'f',0},{'g',0},{'h',0},{'i',0},{'j',0},{'k',0},{'l',0},{'m',0},{'n',0},{'o',0},{'p',0},{'q',0},{'r',0},{'s',0},{'t',0},{'u',0},{'v',0},{'w',0},{'x',0},{'y',0},{'z',0}};
 char sr[20];
 int i,j,n,m,max=0;
 //scanf("%s",sr);
 while(scanf("%s",sr)!=EOF){
                toLowerCase(sr);
                for(i=0;i<strlen(sr);i++)       
            for(j=0;j<26;j++)
                if(sr[i]==zm[j][0])
                {
                    zm[j][1]++; 
                    break;
                }
        for(i=1;i<26;i++)
        {
            max=zm[0][1];
            n=0;
            if(max<zm[i][1])
            {
                max=zm[i][1];
                n=i;
            }
            else if(max==zm[i][1])
                m=i;
        }
        if(zm[n][1]==zm[m][1])
            printf("出现次数最多的是%c和%c\n最多为:%d次",zm[n][0],zm[m][0],max);
        else
            printf("出现次数最多的是%c\n最多为:%d次",zm[n][0],max);
        m=n=max=0;
        }

NK_test
NK_test   Rxr 2016.05.12 00:11

map即可。不用这么麻烦

qq423399099
qq423399099   Ds   Rxr 2016.05.12 10:20
  #include<stdio.h>

int main(void)
{
    int i,max=0;
    char ch;
    int check['z'-'a']={0};
    while(scanf("%c",&ch)!=-1){
        if('a'<=ch&&ch<='z') check[ch-'a']++;
        if('A'<=ch&&ch<='Z') check[ch-'A']++;
    }
    /*填补这一段代码*/
    for(i=0;i<'z'-'a';i++){
        if(check[i]>check[max]) max=i;
    }
    printf("%d %c\n", check[max], 'a'+ max);
    return 0;
}

图片说明

mazegong
mazegong   2016.05.12 15:24

一群人秀C语言啊,感觉没啥实际用途啊

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!