问题描述
- 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; }
这个是我自己写的(写到一半实在编不下去了),还是不要看比较好,不然会干扰大家思维
解决方案
http://www.cnblogs.com/fhefh/archive/2011/10/27/2226925.html
解决方案二:
#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] != ''){
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:%dn",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("%cn",i+ 'a');
}
}
}
解决方案三:
建立一个二维数组进行匹配,找到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和%cn最多为:%d次",zm[n][0],zm[m][0],max);
else
printf("出现次数最多的是%cn最多为:%d次",zm[n][0],max);
m=n=max=0;
}
解决方案四:
map即可。不用这么麻烦
解决方案五:
#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 %cn", check[max], 'a'+ max);
return 0;
}
解决方案六:
一群人秀C语言啊,感觉没啥实际用途啊
时间: 2024-08-31 15:47:58