置换加密法

xiaoxiao2021-02-28  118

题目描述

置换加密算法是最简单的加密算法,其原理是将一个字母表中的字符替换成另一个字母表中的字符。这种形式的加密算法,已经存在2000多年的历史了。

输入

输入文件中第一行是原文用的字母表,第2行是密文用的字母表。接下来有若干行,每一行是待加密的原文,每一行都不超过64个字符。

输出

输出第1行是密文用的字母表,第2行是原文用的字母表。接下来的每一行是将输入文件中对应行加密后得到的密文字符串,原文字母表中没有的字符不用替换。

样例输入

abcedfghijklmnopqrstuvwxyz zyxwvutsrqponmlkjihgfdecba Shar's Birthday: The birthday is October 6th,but the party will be Saturday, October 5. It's my 24th birthday and the first one in some

样例输出

zyxwvutsrqponmlkjihgfdecba abcedfghijklmnopqrstuvwxyz Sszi'h Brigsvzb: Tsw yrigsvzb rh Oxglywi 6gs,yfg gsw kzigb eroo yw Szgfivzb, Oxglywi 5. Ig'h nb 24gs yrigsvzb zmv gsw urihg lmw rm hlnw

 

下面是我第一次写的代码

#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跳出循环导致转化过后的字母继续在原文中查找,导致答案错误。

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-673631.html

最新回复(0)