题6.12:有一行电文,已按照下面规律翻译成密码: A->Z a->z B->Y b->y C->X c->x即第1个字母编程第26个字母,第i个字母编程第(26-i+1)个字母,非字母字符不变,要求

题目

本题是谭浩强《C程序设计课后习题》第6章第12题。
题目:有一行电文,已按照下面规律翻译成密码:
A->Z a->z
B->Y b->y
C->X c->x
…。

即第1个字母编程第26个字母,第i个字母编程第(26-i+1)个字母,非字母字符不变,要求编程序将密码 译回原文,并输出密码和原文。


以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj

一、解题思路

思路:
在这里插入图片描述1,首先我们根据题目给出的规律得出以下编码公式:
2,26-(ch-’A/a’)-1
3,26是一共26个字母,(ch-’A/a’)是指从A/a开始数是正数第几个数,这样26-(ch-’A/a’)就等于与之相对应的倒数第几个数,为什么要-1?因为数组下标是从0开始,为了防止转变后下标越界,我们需要-1保持平衡。
4,编码和解码规则相同,将所给密码的每个字符区分大小写然后代入公式,注意,因为这个公式算出的是由正数第几个转变为倒数第几个,所以我们如果想正常输出的话还需要在其前面加上起始数A/a
5,得出最终公式为:
6,大写str=‘A’+(26 - (str- ‘A’) - 1);小写str=‘a’+ (26 - (str[i] - ‘a’) - 1);

二、代码部分

1.引入库

代码如下(示例):

#include<stdio.h>

2.主函数部分

代码如下(示例):

void main()
{
	char str[128] = { 0 };
	printf("请输入一串密码:");
	gets(str);
	printf("你输入的密码为:%s\n", str);
	int i=0;
	while (str[i])
	{
		if (str[i] >= 'A' && str[i] <= 'Z')
			str[i] = 'A'+(26 - (str[i] - 'A') - 1);
		else if (str[i] >= 'a' && str[i] <= 'z')
			str[i] ='a'+ (26 - (str[i] - 'a') - 1);
		i++;
	}
	printf("破译后的原文为:%s", str);
}

三、执行结果

在这里插入图片描述

输入:

请输入一串密码:I am LiWenJie

输出:

你输入的密码为:I am LiWenJie
破译后的原文为:R zn OrDvmQrv
  • 24
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立志冲海大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值