82 密码分析

82 密码分析

作者: Turbo时间限制: 1S章节: 结构体

问题描述 :

 密码分析学中常常需要统计字符出现的频度。给定若干行短文,要求按字符出现的频度由高到低输出,当两个字符出现的频度相同时,按字符大小的顺序输出。

注意:只需要统计英文字母的频度,非英文字母一律忽略。

输入说明 :

 输入由多组数据组成。每组数据由一行长度不超过100的字符串组成,不区分字母大小写,如A与a看作同一个字母。

输出说明 :

 对每组输入数据都有若干行输出,每行有两个输出数据,第一个数据为某个大写字母,第二个数据为该字母出现的频度,两个数据之间有一个空格。输出顺序按字母出现的频度由高到低输出,当两个字母的频度相同时,按字母大小的顺序输出。两组输出之间有一行空行。

输入范例 :

Do what you say, say what you do.
This is a test.
Count me 1 2 3 4 5.

输出范例 :

A 4
O 4
Y 4
D 2
H 2
S 2
T 2
U 2
W 2

S 3
T 3
I 2
A 1
E 1
H 1

C 1
E 1
M 1
N 1
O 1
T 1
U 1
 

#include <stdio.h>
#include <string.h>

char str[100];
int main()
{
	int len,times=0,temp1,max,i,j;
	int alp[26]={0};
	int n=26;
	while(gets(str))
	{
		times++;
		len=strlen(str);
		for(i=0;i<len;i++)
		{
			if(str[i]>='a'&&str[i]<='z' || str[i]<='Z'&&str[i]>='A')
			{
				if(str[i]>='a'&&str[i]<='z')
					str[i]=str[i]-32;
				temp1=str[i]-'A';
				alp[temp1]++;
			}
		}
		if(times>1)
			printf("\n");
		for(i=0;i<len;i++)
		{
			max=0;
			for(j=0;j<26;j++)
			{
				if(alp[j]>alp[max])
					max=j;
			}
			if(alp[max]>0)
				printf("%c %d\n",max+'A',alp[max]);
			alp[max]=0;
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/HurryBen/article/details/105720250
82
82!