解题思路:
输入-小写转换大写-密文转明文-大写转为小写输出
注意事项:
套用公式用于大写字母,输出时保留大小写,所以用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 人评分
A+B for Input-Output Practice (C++代码)浏览:609 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:759 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:511 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:880 |
兰顿蚂蚁 (C++代码)浏览:1045 |
C语言训练-求PI* (C语言代码)浏览:614 |
【蟠桃记】 (C语言代码)浏览:664 |
WU-格式化数据输出 (C++代码)浏览:1212 |
IP判断 (C语言描述,蓝桥杯)浏览:1095 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:549 |