置换加密算法是最简单的加密算法,其原理是将一个字母表中的字符替换成另一个字母表中的字符。这种形式的加密算法,已经存在2000多年的历史了。
输入文件中第一行是原文用的字母表,第2行是密文用的字母表。接下来有若干行,每一行是待加密的原文,每一行都不超过64个字符。
输出第1行是密文用的字母表,第2行是原文用的字母表。接下来的每一行是将输入文件中对应行加密后得到的密文字符串,原文字母表中没有的字符不用替换。
下面是我第一次写的代码
#include<iostream> #include<string.h> #include<stdio.h> using namespace std; int main() { char a[26],b[26],c[64]; gets(a); gets(b); puts(b); puts(a); while(gets(c)) { for(int i=0;i<strlen(c);i++) { for(int j=0;j<strlen(a);j++) if(c[i]==a[j])c[i]=b[j]; } cout<<c<<endl; } return 0; }
运行结果是
可以看出答案错误,部分字母转化但部分和原来相同,我原来一直思考是不是没转化,其实只是二次转化了
下面是我修改过后的代码
#include<iostream> #include<cstring> #include<stdio.h> using namespace std; int main() { char a[26],b[26],c[64]; gets(a); gets(b); puts(b); puts(a); while(gets(c)) { for(int i=0;i<strlen(c);i++) { for(int j=0;j<strlen(a);j++) if(c[i]==a[j]) { c[i]=b[j]; break; } cout<<c[i]; } cout<<endl; } return 0; }很明显当在原文中找到并转化过后我并没有及时用break跳出循环导致转化过后的字母继续在原文中查找,导致答案错误。