定义一个数组int zm[26],记录字母出现的次数,
定义一个char数组 char cc[26],值是从a-z
统计完字母的次数后,根据次数多少排序,cc数组随之排序.
代码如下:
#include <stdio.h>
int main()
{
char buf[100];
int i,j,t;
int zm[26]={0}; //字母对应的数量
char cc[26];
char ch;
for(i=0;i<26;i++)
cc[i] = 'a'+i;
gets(buf);//读取一行字符串
i=0;
while (buf[i] != '\0')
{
if(buf[i]>='a' && buf[i]<='z')
zm[buf[i]-'a'] += 1;
else if(buf[i]>='A' && buf[i]<='Z')
zm[buf[i]-'A'] += 1;
i++;
}
//排序
for (i=0;i<25;i++)
{
for (j=0;j<25-i;j++)
{
if(zm[j] < zm[j+1])
{
t = zm[j];
zm[j]=zm[j+1];
zm[j+1]=t;
ch = cc[j];
cc[j] = cc[j+1];
cc[j+1]=ch;
}
}
}
//输出
for(i=0;i<26;i++)
{
if(zm[i] > 0)
{
printf("%c %d\n",cc[i],zm[i]);
}
}
return 0;
}
维护一个二维数组,第一行存放每个字母的索引(0到25或1到26),第二行初始化为0
读入字符串,每读到一个字母,就将数组第二行对应位置+1
依据二维数组的第二行对二维数组排序,排序时两个维度同步交换
排序后,按照二维数组第一维的顺序输出对应的字母即可