C語言編程-9_4 字符統計

輸入一個字符串(其長度不超過81),分別統計其中26個英文字母出現的次數(不區分大、小寫字母),並按字母出現次數從高到低排序,若次數相同,按字母順序排列。字母輸出格式舉例,例如:A-3,表示字母A出現3次,C-0表示字母C沒有出現。

       輸入:

       第一行爲輸入,佔一行,輸入的字符串可能含有空格

       輸出:

       第二行爲輸出,佔一行。按照字母輸出格式從高到低輸出,各字母輸出之間用一個空格字符分隔。

       樣例:

       123abcAABXxwvUu+

       A-3 B-2 U-2 X-2 C-1 V-1 W-1 D-0 E-0 F-0 G-0 H-0 I-0 J-0 K-0 L-0 M-0 N-0 O-0   P-0 Q-0 R-0 S-0 T-0 Y-0 Z-0 

//插入排序法
#include<stdio.h>
#include<string.h>


int main()
{
	char str[81] = "123abcAABXxwvUu+";
	gets(str);
	int letter_stat[26] = {0};
	char letter[26] = { ' ' };
	for (int i = 0; i < 26; i++)
	{
		letter[i] = i + 'A';
	}
	int i = 0;
	while (str[i])
	{
		int k = 0;
		if (str[i] >= 'A'&&str[i] <= 'Z')
		{
			k = str[i] - 'A';
			letter_stat[k]++;
		}
		else if (str[i] >= 'a'&&str[i] <= 'z')
		{
			k = str[i] - 'a';
			letter_stat[k]++;
		}
		i++;
	}

	for (int i = 0; i < 26; i++)
	{
		int k = letter_stat[i];
		int temp = letter[i];
		int j = i - 1;
		while (j >= 0 && letter_stat[j] < k)
		{
			letter_stat[j + 1] = letter_stat[j];
			letter[j + 1] = letter[j];
			j--;
		}
		letter_stat[j + 1] = k;
		letter[j + 1] = temp;
	}
	for (int i = 0; i < 25; i++)
	{
		printf("%c-%d ", letter[i],letter_stat[i]);
	}
	printf("%c-%d", letter[25], letter_stat[25]);
	return 0;
}
//冒泡排序法
#include<stdio.h>
#include<string.h>


int main()
{
	char str[81] = "123abcAABXxwvUu+";
	gets(str);
	int letter_stat[26] = {0};
	char letter[26] = { ' ' };
	for (int i = 0; i < 26; i++)
	{
		letter[i] = i + 'A';
	}
	int i = 0;
	while (str[i])
	{
		int k = 0;
		if (str[i] >= 'A'&&str[i] <= 'Z')
		{
			k = str[i] - 'A';
			letter_stat[k]++;
		}
		else if (str[i] >= 'a'&&str[i] <= 'z')
		{
			k = str[i] - 'a';
			letter_stat[k]++;
		}
		i++;
	}
	for (int i = 0; i < 25; i++)
		for (int j = 0; j < 25 - i; j++)
		{

			if (letter_stat[j] < letter_stat[j + 1])
			{
				int temp = letter_stat[j + 1];
				letter_stat[j + 1] = letter_stat[j];
				letter_stat[j] = temp;

				temp = letter[j + 1];
				letter[j + 1] = letter[j];
				letter[j] = temp;

			}

		}

	for (int i = 0; i < 25; i++)
	{
		printf("%c-%d ", letter[i],letter_stat[i]);
	}
	printf("%c-%d", letter[25], letter_stat[25]);
	return 0;
}

 

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