/* 功能:为统计英文字母的使用频率,输入一个不包括空格的由英文字母组成的字符串,长 度不超过200个字符。统计26个英文字母的使用频率,不区分大小写。最后按使用 频率从大到小输出字母(小写字母)和使用频率(出现的次数). 运行环境:Dev-c++4.9.9.2. 作者: Email: */ #include <stdio.h> void WordInput(char *Word_Input); void WordChange(char *Word_Input); void WordStatistics(char *Word_Input,int *Statistics_Result); void Bubble_Sort(int *Statistics_Result, int *Word_sample); void Statistics_Put(int *Statistics_Result,int *Word_sample); //主程序
int main(void) { char Word_Input[200]; int Statistics_Result[26]={0}; int Word_sample[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','k','i','s','t','u','v','w','x','y','z'} ; //输入
printf("请输入句子:\n"); WordInput(Word_Input); //装换
WordChange(Word_Input); //统计
WordStatistics(Word_Input,Statistics_Result); //排序
Bubble_Sort(Statistics_Result, Word_sample); //输出结果
Statistics_Put(Statistics_Result,Word_sample); getchar(); return 1; }
/*********************************************输入字符*********************************/ void WordInput(char *Word_Input) { int Number_Limit=0; //输入数据
while( (scanf("%c", &Word_Input[Number_Limit]) )&& Word_Input[Number_Limit]!='\n'&& Number_Limit <200 ) Number_Limit++; } /**********************************************字母大小写装换***************************/ void WordChange(char *Word_Input) { //作为标志
int flag=0; //检测是否到数组尾部
while(Word_Input[flag]!='\0') { if(Word_Input[flag]>=65&&Word_Input[flag]<=90) Word_Input[flag]=Word_Input[flag]+32; flag++; } } /**********************************************统计字母个数 ******************************/ void WordStatistics(char *Word_Input,int *Statistics_Result) { int flag=0; int number=0; while(Word_Input[flag]!='\0') { //在大字母内做装换
// printf("%d\n", Statistics_Result[number]) ;
if(Word_Input[flag]>=97&&Word_Input[flag]<=122) { //转换计算
number=Word_Input[flag]-97; Statistics_Result[number]++; } flag++; } } /******************************************排序*****************************************/ void Bubble_Sort(int *Statistics_Result, int *Word_sample) { int flag_in, flag_out, temp1,k,temp2; /*循环到没有比较范围*/ for (flag_out=26; flag_out>0; flag_out=k) { /*每次预置k=0,循环扫描后更新k*/ for ( flag_in=0, k=0; flag_in<flag_out; flag_in++) { /*大的放在后面,小的放到前面*/ if (*(Statistics_Result+ flag_in) > *(Statistics_Result+ flag_in+1)) { /*完成交换*/ temp1 = *(Statistics_Result+ flag_in); temp2 = *(Word_sample+ flag_in); *(Statistics_Result+ flag_in) = *(Statistics_Result+ flag_in+1); *(Word_sample+ flag_in) = *(Word_sample+ flag_in+1); *(Statistics_Result+ flag_in+1) = temp1; *(Word_sample+ flag_in+1) = temp2; /*保存最后下沉的位置。这样k后面的都是排序排好了的*/ k = flag_in; } } } } /******************************************输出结果*****************************************/ void Statistics_Put(int *Statistics_Result,int *Word_sample) { int flag; //循环输出结果
for(flag=25;flag>=0;flag--) printf("%c:%d\n",Word_sample[flag],Statistics_Result[flag]) ; printf("运算结束___\n"); }
|