Encryption
原题:
加密(Encryption)
已知的最古⽼的⼀种加密技术是凯撒加密(得名于 Julius caesar)。该⽅法把⼀条消息中的每个字⺟⽤字⺟表中固定距离之后的那个字⺟来替代。(如果越过了字⺟Z,会绕回到字⺟表的起始位置。例如,如果每个字⺟都⽤字⺟表中两个位置之后的字⺟代替,那么Y就被替换为A,Z就被替换为B。)编写程序⽤凯撒加密⽅法对消息进⾏加密。⽤户输⼊待加密的消息和移位计数(字⺟移动的位置数⽬):
Enter message to be encrypted: Go ahead, make my day.
Enter shift amount (1-25): 3
Encrypted message: Jr dkhdg, pdnh pb gdb.
注意,当⽤户输⼊26与移位计数的差值时,程序可以对消息进⾏解密:
Enter message to be encrypted: Jr dkhdg, pdnh pb gdb.
Enter shift amount (1-25): 23
Encrypted message: Go ahead, make my day
不是字⺟的那些字符不要改动。此外,加密时不要改变字母的大小写。
一种更加简便的方法
1.sizeof()函数:
(1)作用:计算数组的字节数
(区分:strlen计算字符数组的字符数,以“\0"为结束符)
(2)使用:
sizeof(a)/sizeof(a[0])
用整个数组的字节数除以单元字节数,可得到元素个数(好像这道题中不需要哈)
在define中,前面要加上(int),强制转换
2.isalpha()函数:
(1)它包含于#include<ctype.h>
头函数
(2)作用:可判断字母是否为英文字母,大小写
不是英文字母,返回值为0;是大写,返回1;是小写,返回2;
switch(isalpha(a[i]))
(判断返回值)
判断字母是否大写的其他方法:
char c;a[
if(c>='A' && c<='Z')
printf("大写!\n");
else if(c>='a' && c<='z')
printf("小写\n");
else
printf("不是字母\n");
1.关于数组的输入
之前有一个问题,我声明char a[100]
,而且输入数组时是
for(i=0;i<SIZE;i++)
scanf("%c",&a[i]);
最终在结果框里必须输入100个字符才能进入下一步
改动处是,遇到换行符则break,停止输出
for (i=0;i <SIZE;i++)
{
if ((ch = getchar()) =='\n')
break;
a[i] = ch;
}
(这个if里面的break是跳出for循环)
4.关于字母的转变
最简单的表现方法:
c=c-('a'-'A'); //小写转大写
c=c+('a'-'A'); //大写转小写
我们采用代码
b[i]=((a[i]-'A')+num)%26+'A';//大写字母的转换
b[i]=((a[i]-'a')+num)%26+'a';//小写字母的转换
%26取余数的范围是0~25,再加上’A’,就成了’A’到’Z’中的任何字母
然后判断字母是否过界
if((b[i]>'Z')&&(b[i]<'a'))//判断大写是否过界
if(b[i]>'z')//判断小写是否过界