c语言-字符练习题

目录


前言

本篇文章记录有关字符操作的练习题

题目一

题目描述:

有一行电文,以按下面规律译成密码:

A->Z a->z
B->Y b->z
C->X c->x
... ...

规律:第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。

要求编程序将密文译会原文,并输出密码和原文。

1.1 题目分析

假设存储密文的数组为originalText,分两种情况讨论:

情况一:

当originalText[i]是大写字母时,根据大写字母A的ASCII为65

i = originalText[i] - 64 ,可得originalText[i]在字母序列的第几个字母,例如:

假设originalText[i] = 'B',字符B的ASCII为66,则(66-64)得出B为二个字母

(26-i+1) = (26 - (originalText[i]-64)+1) = 91 - originalText[i]

而91-originalText[i]则为第i个字母的密文在字母序列的位置。

那么91-originalText[i]+64 得到就是第i个字母的密文,即155-originalText[i]

情况二:

当originalText[i] 是小写字母时,根据小写字母的a的ASCII为97
i = originalText[i]-96 ,
(26-i+1) = (26 - (originalText[i]-96)+1) = (123-originalText[i]),
密文字母 = 123-originalText[i]+96 = 219 - originalText[i].

由于此密码的转换是对称转换,即第1个字母转换为最后一个字母,最后一个字母转换为第1个字母,

则原文与密文的转换用的公式一致。

1.2 程序设计

程序的N-S图如图1.2:

图1.2 程序N-S图

根据N-S图,编写一下代码:

c 复制代码
//使用两个数组,一个存储原文,一个存储译文
void decrypt(char originalText[], char translateText[])
{
	int i = 0;
	while (originalText[i] != '\0')
	{
		if (originalText[i] >= 'A' && originalText[i] <= 'Z')
			translateText[i] = 155 - originalText[i];
		else if (originalText[i] >= 'a' && originalText[i] <= 'z')
			translateText[i] = 219 - originalText[i];
		else
			translateText[i] = originalText[i];
		i++;
	}
}

总结

相关推荐
l1t2 小时前
轻量级XML读写库Mini-XML的编译和使用
xml·c语言·解析器
小莞尔3 小时前
【51单片机】【protues仿真】基于51单片机停车场的车位管理系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
xianyinsuifeng4 小时前
Oracle 10g → Oracle 19c 升级后问题解决方案(Pro*C 项目)
c语言·数据库·oracle
学c语言的枫子4 小时前
数据结构——双向链表
c语言·数据结构·链表
3壹6 小时前
数据结构精讲:栈与队列实战指南
c语言·开发语言·数据结构·c++·算法
etcix7 小时前
dmenux.c: integrate dmenu project as one file
c语言·前端·算法
曙曙学编程8 小时前
stm32——独立看门狗,RTC
c语言·c++·stm32·单片机·嵌入式硬件
晨非辰9 小时前
#C语言——刷题攻略:牛客编程入门训练(九):攻克 分支控制(三)、循环控制(一),轻松拿捏!
c语言·开发语言·经验分享·学习方法·visual studio
陈序猿(代码自用版)10 小时前
【考研C语言编程题】数组元素批量插入实现(含图示+三部曲拆解)
c语言·开发语言·考研
77qqqiqi10 小时前
学习循环语句
c语言