C语言中,输入一段字符串(大小写的字母),要求输出:有哪些字母及其个数

如题所述

int a[26]={0},b[26]={0};
char c[100];
int i;
gets(c);
for(i=0;c[i]!='\0';i++)
{
if(c[i]>='a'&&c<='z')
a[c[i]-'a']++;
if(c[i]>='A'&&c<='Z')
b[c[i]-'A']++;
}
这样就可以算出每个字符的出现次数,打印出来就可以
printf("小写字符个数:\n");
for(i=0;i<26;i++)
{
if(a[i]==0)
continue;
printf("%c %d\n",i+'a',a[i]);
}
printf("大写字符个数:\n");
for(i=0;i<26;i++)
{
if(b[i]==0)
continue;
printf("%c %d\n",i+'A',b[i]);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-06
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int i,sum=0;
char a[100];
printf("请输入:");
scanf("%s", a);
printf("\n大小写字母 :");
for(i=0; '\0'!=a[i]; i++)
{
if((a[i]>='a'&& a[i]<='z') ||( a[i]>='A' && a[i]<='Z' ))
{
sum++;
putchar(a[i]);
}
}
printf("\n大小写字母个数 : %d\n",sum);
return 0;
}追问

若这段字符串中有重复的字母呢?若要是按照你的这个来,,,同样会输出重复的字母

追答

参照3楼,我给他投票了。我是审错题了。
cnt[200]改成cnt['z'+1]更节省内存。
再想更节省内存就cnt[26+26],但是你的储存和计算都要转换。

第2个回答  2012-01-06
#include<stdio.h>
#include<string.h>
char s[1000];
int main(void)
{
int cnt[200]={0};
int i;
gets(s);
for(i=0;s[i];i++)
{
cnt[s[i]]++;
}
for(i='a';i<='z';i++)
{
if(cnt[i]>0)
{
printf("%c:%d\n",i,cnt[i]);
}
}
for(i='A';i<='Z';i++)
{
if(cnt[i]>0)
{
printf("%c:%d\n",i,cnt[i]);
}
}
return 0;
}