算法與編程實踐內容安排 統計字母的使用頻率


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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章