前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >凯撒密码

凯撒密码

作者头像
WindCoder
发布2018-09-20 16:09:08
4830
发布2018-09-20 16:09:08
举报
文章被收录于专栏:WindCoderWindCoder
代码语言:javascript
复制
/*
功能:凯撒密码
日期:2013-06-18
*/
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
void countFrequency(char *ch,int *frequency);
int main(void)
{
	char Ch[10000];
	int Frequency[26]={0};

	printf("请输入密文:n");
	gets(Ch);

	countFrequency(&Ch[0],&Frequency[0]);

	printf("n");
    system("pause");
	return 0;
}

/*************************************************************************
函数名:countFrequency
功能:统计英文字符出现的频率
参数:char *ch 要统计字符
      int *frequency 存放每个字符的出现频率的数组
返回值:无
*************************************************************************/

void countFrequency(char *ch,int *frequency)
{
	int i,j,len,num,max;
	len = strlen(ch);

 //计算并存放26个字母出现的频率
	for (i = 0 ; i < 26 ;i++)
	{
		num = 0;
		for (j=0;j<len;j++)
		{
			if (*(ch+j) == 65+i || *(ch+j)== 97+i)
			{
				num++;
			}
		}
		*(frequency+i) = num;
	}
//寻找出现频率最大字母
	max = frequency[0];

	for (i = 0 ; i < 26 ; i++)
	{
		if (max < frequency[i])
		{
			j=i;
			max = frequency[i];
		}
	}
//得出位移位数
	num=97+j-101;
//字母移动
	for (i = 0 ;i < len ; i++ )
	{
		if(ch[i] >= 97 && ch[i] <= 99 || ch[i] >= 65 && ch[i] <= 67)
		{
			ch[i] = ch[i] + 26 - num ;
		}
		else if((ch[i] >=68 && ch[i]<=90)||(ch[i]>=100 && ch[i] <= 122))
		{

			ch[i] = ch[i] - num;

		}
	}
	printf("解密后为:n");
	puts(ch);

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档