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


为统计英文字母的使用频率,输入一个不包括空格的由英文字母组成的字符串,长度不超过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;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值