加密在操作时需要注意: 运算忽略参与运算的字母的大小写,并保持字母在明文 中的大小写形式; 当明文 的长度大于密钥 的长度时,将密钥 重复使用。 例如,明文 =HelloworldM=Helloworld,密钥 =abck=abc 时,密文 =Hfnlpyosnd。输入参数的格式为 2 行, 第一行为一个字符串,表示密钥 k,长度不超过 100,其中仅包含大小写字母。 第二行为一个字符串,表示经加密后的密文,长度不超过 1000,其中仅包含大小写字母。 输出格式为一个字符串,表示输入密钥和密文所对应的明文。 对于 100% 的数据,输入的密钥的长度不超过 100,输入的密文的长度不超过 1000,且都仅包含英文字母。 请用c++补充以下代码,使其符合前文所述的要求:#include<iostream> #include<string> using namespace std; int main() { }
时间: 2024-02-11 09:08:29 浏览: 74
基于位运算的两种字符串加密解密算法
5星 · 资源好评率100%
以下是代码实现:
```
#include<iostream>
#include<string>
using namespace std;
int main() {
string key, ciphertext;
cin >> key >> ciphertext;
int key_len = key.length();
int ciphertext_len = ciphertext.length();
string plaintext = "";
for(int i = 0; i < ciphertext_len; i++) {
char c = ciphertext[i];
char k = key[i % key_len];
if(c >= 'a' && c <= 'z') {
c = (c - k + 26) % 26 + 'a';
}
else if(c >= 'A' && c <= 'Z') {
c = (c - k + 26) % 26 + 'A';
}
plaintext += c;
}
cout << plaintext << endl;
return 0;
}
```
代码实现的思路:
1. 读入密钥 k 和密文 ciphertext。
2. 计算密钥长度 key_len 和密文长度 ciphertext_len。
3. 遍历密文中的每一个字符 c。
4. 计算对应的密钥字符 k,使用取模操作实现密钥重复使用。
5. 根据题目描述,忽略字母的大小写进行加解密,所以需要判断 c 的大小写形式,并且保持明文中字母的大小写形式。
6. 将解密后的明文字符加入 plaintext 字符串中。
7. 输出 plaintext。
阅读全文