第一次在CSDN上写博客…
记录一下想了有那么久的,这串代码
起因是做应用密码学的作业时,有Vigenere密码的加密解密、仿射密码加密解密、Playfair算法、Hill密码
因为数据量比较大,要把字母转换成数字,然后还有各种计算
就想着写程序帮我计算一些步骤
仿射密码的程序比较容易,在之前闲着写的凯撒密码程序的代码上修改了实现算法
另外两个得多想想,估计写完代码的时间够我手写把题目做好多遍了
就是这个Vigenere密码引起了兴趣
几道题目,给出的明文或密文是字母,密钥有的题目给的数字序列,有的是单词
我就在想,该怎样实现,当我输入的是字符串的时候,存到字符数组中
而输入的是数字时,存到整型数组中,而且这个数字是任意数量的
在先手写把作业完成后,闲下来把代码写了些,终于算是完成
代码功能
任意输入数据
- 当输入的第一个字符是数字时,将本次输入的数据存到整型数组int[]中,可输入任意个数的数字。别的字符例如空格、逗号、字母等,作为分隔符处理丢弃,最后回车完成输入。
01会被认为是1。 - 当输入的第一个字符为非数字,即字母时,存到字符数组char[]中,别的字符会被丢弃,回车完成输入。
实现代码
#include <stdio.h>
#include <string.h>
int change(char a) // 字符转数字函数
{
if(a>=65 && a<=90 )
return (a-65);
if(a>=97 && a<=122 )
return (a-97);
}
void inputNum(int M[],int &lenM,char ch) // 输入数字数组,可实现输入任意数量的数字,以回车作为结束符,其他字符为间隔符
{
int num=0;
while(1)
{
if(ch=='0' && num==0) // 对输入单个0的支持
{
M[lenM]= num;
lenM++;
}
else if(ch >= '0' && ch <= '9')
{
num = 10 * num + ch - '0';
}
else if