并按出现次数大小打印相应的字母及出现的次数,要求出现次数相同的字母按字典顺序打印。
【c语言】
主要是如何按出现次数大小打印没有思路
我的思路是:
1、先获取字符串输入字符数组
2、遍历数组,把字符及其计数分别存入一个字符数组和int数组,一 一对应。
3、遍历计数数组,按次数大小排序数组及其字符数组,如果次数相同,用strcmp函数比较字符的字典顺序,按字典顺序排序
4、打印结果
代码如下:
#include <stdio.h>
#include <string.h>
//将字符存入字符数组letter,并更新其计数
void storeLetter(char * letter,int * num,char ch){
int i=0;
int find=0;
while(letter[i]!='\0'){
if(letter[i]==ch){
find=1;
num[i]++;
}
i++;
}
if(find==0){
letter[i]=ch;
num[i]++;
}
}
int main(void){
char str[100];
char letter[52]={'\0'};
int num[52]={0};
printf("请输入一个字符串:\n");
gets(str);
int i=0;
//把字符串里的每个字符进行计数并存储
while(str[i]!='\0'){
storeLetter(letter,num,str[i]);
i++;
}
// printf("i=%d\n",i);
int k,j;
char ch;
int tnum;
int more;
for(k=0;k<i-1;k++){
more=num[k];
for(j=k;j<i;j++){
//把字母及其计数按次数从大到小排序
if(more<num[j]){
more = num[j];
ch=letter[k];
letter[k]=letter[j];
letter[j]=ch;
tnum=num[k];
num[k]=num[j];
num[j]=tnum;
}
//如果两个字母次数相同,则按字典顺序排序
if(more==num[j]&&strcmp(letter+k,letter+j)>0){
more = num[j];
ch=letter[k];
letter[k]=letter[j];
letter[j]=ch;
tnum=num[k];
num[k]=num[j];
num[j]=tnum;
}
}
}
k=0;
//打印结果
while(letter[k]!='\0'){
printf("%c:%d\n",letter[k],num[k]);
k++;
}
return 0;
}