题解 | #字符串加密#

字符串加密

http://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3

#include<stdio.h>

int main() {
	char key[101] = { '0' };
	char sec[101] = { '0' };
	while (scanf("%s\n%s", &key, &sec) != EOF)
	{
		int len = strlen(key);	//密钥长度
		int seclen = strlen(sec);	//密码长度
		int num[26] = { 0 };	//原26字母出现标志组-出现则标1		
		char newkey[26] = { '0' };	//加密字母表
		int m = 0;	//加密字母表序号
		int index = 0;	//字母转换值(-'A')
		char newsec[101] = { '0' };	//加密后字符串
		//1.密钥全部转为大写
		for (int i = 0; i < len; i++) 
		{
			key[i] = toupper(key[i]);
		}

		//2.密钥有该字母则标记为1,并按序存入加密字母表,不重复存
		for (int i = 0; i < len; i++)
		{	
			index = key[i] - 'A';	//字母序号
			if (num[index] == 0) {		
				num[index] = 1;		//该字母出现则表内置1
				newkey[m++] = key[i];	//按序存入加密字母表中
			}
		}

		//3.存剩余未出现的字母入加密字母表中
		for (int i = 0; i < 26; i++)
		{
			if (num[i] != 1) {
				newkey[m++] = i + 'A';
			}
		}		

		//4.字符串加密

		for (int i = 0; i < seclen+1; i++) 
		{
			if (sec[i] >= 'A' && sec[i] <= 'Z') 
			{
				index = sec[i] - 'A';
				newsec[i] = toupper(newkey[index]);
			}
			else if (sec[i] >= 'a' && sec[i] <= 'z') 
			{
				index = sec[i] - 'a';
				newsec[i] = tolower(newkey[index]);
			}
		}
		for (int i = 0; i < seclen; i++)
		{
			printf("%c", newsec[i]);
		}
		printf("\n");
	}
	return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 16:15
我应届生,去年10月份开始在这家公司实习,到今年10月份正好一年想(实习+试用期),在想要不要提前9月份就离职,这样好找工作些,但又差一个月满一年,又怕10月份国庆回来离职,容易错过了下半年的金九银十,到年底容易gap到年后
小破站_程序员YT:说这家公司不好吧,你干了快一年 说这家公司好吧,你刚毕业就想跑路说你不懂行情吧,你怕错过金九银十说 你懂行情吧,校招阶段在实习,毕业社招想换工作 哥们,我该怎么劝你留下来呢
应届生,你找到工作了吗
点赞 评论 收藏
分享
06-07 19:59
门头沟学院 C++
补药卡我啊😭:都快15年前的了还在11新特性
你的简历改到第几版了
点赞 评论 收藏
分享
07-07 11:33
江南大学 Java
已经在暑假实习了&nbsp;,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务