您的位置:首页 > 编程语言

算法与编程实践内容安排 统计字母的使用频率

2011-08-21 15:54 295 查看
为统计英文字母的使用频率,输入一个不包括空格的由英文字母组成的字符串,长度不超过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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: