为统计英文字母的使用频率,输入一个不包括空格的由英文字母组成的字符串,长度不超过200个字符。统计26个英文字母的使用频率,不区分大小写。最后按使用频率从大到小输出字母(小写字母)和使用频率(出现的次数)。
#include<stdio.h>
#include<ctype.h>
//转换成小写字母
void lower(char *str){
int i;
for(i = 0; str[i] != '\0'; i++){
if(isupper(str[i]))
str[i] += 32;
}
}
//统计各字母出现的频率
void count(char *str, int *arr){
int i, tmp;
for(i = 0; str[i] != '\0'; i++){
tmp = str[i] - 'a';
arr[tmp]++;
}
}
//初始化字母顺序
void initArr(int *arr){
int i;
for(i = 0; i < 26; i++)
arr[i] = i;
}
//交换两个数的值
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
//排序
void sort(int *_letters, int *arr){
int i, j, k;
for(i = 0; i < 25; i++){
k = i;
for(j = i + 1; j < 26; j++){
if(_letters[k] < _letters[j])
k = j;
}
if(i != k){
swap(&_letters[k], &_letters[i]);
swap(&arr[k], &arr[i]);
}
}
}
void print(int *_letters, int *arr){
int i;
for(i = 0; i < 26; i++){
printf("%c : %d\n", arr[i]+'a', _letters[i]);
}
}
int main(){
int letters[26] = {0};
int Arr[26]; //保存字母的顺序
char string[200];
gets(string);
lower(string);
count(string, letters);
initArr(Arr);
sort(letters, Arr);
print(letters, Arr);
return 0;
}