算法与编程实践内容安排 统计字母的使用频率
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; }
相关文章推荐
- 算法与编程实践内容安排 进制转换
- 统计字符串中的字母使用频率
- 使用Java统计字母并且按照字母的次数排序
- 15个使用频率极高的基础算法题(附完整代码)
- 使用python做tf-ifd算法实践
- 使用Java统计英文文章的单词频率。
- 基于分块统计和机器学习的主题类网页内容识别算法实现和应用范例
- 在C#中使用ASV封装编程实践中遇到的问题总结
- 【经典算法】:基于中文字符分析的统计频率算法实现
- 有关统计单词频率的算法c语言实现
- 15道使用频率极高的基础算法题(完整代码实现)
- 算法:编程在一个已知的字符串中查找最长单词,假定字符串中只包含字母和空格,空格用来分隔不同单词
- 矩阵快速幂算法的原理与实践——“使用MATLAB求解大型斐波那契数"
- 有关统计单词频率的算法c语言实现
- [python]使用Counter统计文章中出现频率最高的单词
- 15道使用频率极高的基础算法题
- 15道使用频率极高的基础算法题
- 基于分块统计和机器学习的主题类网页内容识别算法实现和应用范例
- 使用R完成字符串的子字符串频率统计
- 【经典算法】:英文文章统计字符频率