爲統計英文字母的使用頻率,輸入一個不包括空格的由英文字母組成的字符串,長度不超過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;
}