解题思路:
输入-小写转换大写-密文转明文-大写转为小写输出
注意事项:
套用公式用于大写字母,输出时保留大小写,所以用f[i]标记小写字母;
如果k密钥长度不够,用(i%k_len)求;
公式:m[i]=c[i]-(k[i%k_len]-65);
明文=密文-(密钥-65)
参考代码:
#include<iostream>
#include<string.h>
using namespace std;
char key[1001];//密钥
char c[1001];//密文
char m[1001];//明文
int f[1001];//标记
int main() {
int i;
cin >> key >> c;
int c_len = strlen(c);
int k_len = strlen(key);
for (i = 0; i < c_len; i++) {
if (c[i] >= 'a' && c[i] <= 'z') {
f[i] = 1; //如果是小写字母就做标记
c[i] -= 32;//转换大写字母
}
}
//密钥转为大写字母
for (i = 0; i < k_len; i++) {
if (key[i] >= 'a' && key[i] <= 'z') {
key[i] -= 32;
}
}
//明文=密文-(密钥-65)
for (i = 0; i < c_len; i++) { //遍历密文
m[i]=c[i]-(key[i%k_len]-65);
if(m[i]<65){ //如果明文小于A
m[i]=m[i]+26; //就回到Z
}
}
//输出
for(i=0;i<c_len;i++){
if(f[i]==1){ //如果是小写,转为大写
m[i]+=32;
}
cout<<m[i];
}
return 0;
}
0.0分
0 人评分
C二级辅导-阶乘数列 (C++代码)浏览:1901 |
C语言程序设计教程(第三版)课后习题6.1 (C++代码)__gcd()是已经写好的函数,可以直接使用浏览:1934 |
C二级辅导-分段函数 (C语言代码)浏览:868 |
母牛的故事 (C语言代码)浏览:1716 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:586 |
简单的a+b (C语言代码)浏览:760 |
A+B for Input-Output Practice (V) (C++代码)浏览:451 |
十->二进制转换 (C语言代码)浏览:1291 |
printf基础练习2 (C语言代码)浏览:305 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:703 |