函数实现:
输入一段文本,统计每个字符出现的次数,按照字符出现次数从多到少,依次输出,格式如下:
字符1-个数
字符2-个数
……
#include<stdio.h>
#include<string.h>
//创建一个结构体来储存字符和字符出现的次数
struct s{
char a;
int b;
};
void addup(char s[100]){
//变量h对输入的字符总数进行统计
int h=0;
//储存对应字符的ASCLL值
int m=0;
//定义一个数组对输入的字符相对应的位置进行统计
int n[256] = {0};
//将字符与出现的次数存到此数组
struct s a[256];
//中间交换
struct s b[256];
//对应字符的十进制处统计
for(int i=0;i<strlen(s);i++){
m = (int)s[i];
n[m]++;
}
//将字符与对应的次数添加到a中
for(int j=0;j<256;j++){
if(n[j]!=0){
a[h].a = (char)j;
a[h].b = n[j];
h++;
}
}
//利用出现次数进行排序
for(int i=1;i<h;i++){
for(int j=0;j<h-i;j++){
if(a[j].b < a[j+1].b){
b[j] = a[j];
a[j] = a[j+1];
a[j+1] = b[j];
}
}
}
//输出字符与次数
printf("一共有%d个字符!\n",h);
for(int i=0;i<h;i++){
printf("%c-%d \n",a[i].a,a[i].b);
}
}
int main(){
char s[100];
printf("请输入一段文本:\n");
scanf("%s",s);
//将字符串传入函数中去
addup(s);
}