有一行电文,已按下面规律译成密码: A →Z B →Y C →X …… a →z b →y c →x …… 即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,

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

A →Z   B →Y   C →X ……

a →z   b →y   c →x ……

即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。

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

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

int main()
{
	char c[100];
	int i;
	
	printf("请输入电文:\n"); 
	gets(c);
	
	printf("密码是:\n");
	puts(c);
	
	for(i = 0;i < strlen(c);i++)
	{
		if(isupper(c[i]))
	    c[i] = fabs(155 - c[i]);
		if(islower(c[i]))
		c[i] = fabs(219 - c[i]);
	}
	
	printf("原文是:\n");
	puts(c); 
}

谭浩强C程序设计(第四版)p169第12题
找规律找了有10分钟
说明:
可以分成两个数组,因为比较麻烦我就用了一个数组,直接替换的。如果是两个数组,可以分成密码一个数组,原文一个数组,密码内容不会被替换

发布了87 篇原创文章 · 获赞 9 · 访问量 8572

猜你喜欢

转载自blog.csdn.net/qq_40834200/article/details/105077218