#include <iostream> using namespace std; #define STR_LEN 80 #define MAX_LINE 20 //读入一行,长度不超过maxLength void readLine(char str[], int maxLength) { int i = 0; while (i < maxLength) { char ch = cin.get(); if (ch != '\n') { str[i] = ch; } else { break; } i++; } str[i] = '\0'; } //其它函数定义 /********* Begin *********/ void caesarEncrypt(char plainText,char cipherText,int key) { int q=0; for (int x=0;x<MAX_LINE;x++) { if (plainText[x][0]=='#') { break; } while(plainText[x][q]!='\0') { q=q+1; } for (int i=0;i<q;i++) { if(int o=plainText[x][i]>int ('a')) { plainText[x][i]=plainText[x][i]-32; } if(int o=plainText[x][i]>int ('a')) { plainText[x][i]=plainText[x][i]-key; } if (int (plainText[x][i])<int ('A')) { plainText[x][i]=plainText[x][i]-26; } } } } /********* End *********/ int main() { char plainText[MAX_LINE][STR_LEN]; //存储明文 char cipherText[MAX_LINE][STR_LEN]; //存储密文 int key; //存储密钥 //①输入明文 for (int i=0;i<20;i++) { readLine(plainText[i][], 80); } //②输入密钥 cin >> key; //③按密钥进行恺撒加密 caesarEncrypt(plainText, cipherText, key); //④输出密文 cout << cipherText << endl; return 0; /********* End *********/ return 0; }这个代码怎么改
时间: 2024-01-27 13:03:04 浏览: 83
#include <iostream> #include<iomanip> using namespace std;九九乘法表
这个代码有很多问题,需要进行大量的修改,下面是修改后的代码:
```
#include <iostream>
using namespace std;
#define STR_LEN 80
#define MAX_LINE 20
//读入一行,长度不超过maxLength
void readLine(char str[], int maxLength) {
int i = 0;
while (i < maxLength) {
char ch = cin.get();
if (ch != '\n') {
str[i] = ch;
} else {
break;
}
i++;
}
str[i] = '\0';
}
/********* Begin *********/
void caesarEncrypt(char plainText[][STR_LEN], char cipherText[][STR_LEN], int key) {
for (int x = 0; x < MAX_LINE; x++) {
if (plainText[x][0] == '#') {
break;
}
int i = 0;
while (plainText[x][i] != '\0') {
if (islower(plainText[x][i])) { // 判断是否是小写字母
plainText[x][i] = toupper(plainText[x][i]); // 转换为大写字母
}
if (isupper(plainText[x][i])) { // 判断是否是大写字母
plainText[x][i] = (plainText[x][i] - 'A' + key) % 26 + 'A'; // 恺撒加密
}
i++;
}
strcpy(cipherText[x], plainText[x]); // 将明文复制到密文中
}
}
/********* End *********/
int main() {
char plainText[MAX_LINE][STR_LEN]; //存储明文
char cipherText[MAX_LINE][STR_LEN]; //存储密文
int key; //存储密钥
// 输入明文,以 # 结束
int i = 0;
while (true) {
readLine(plainText[i], STR_LEN);
if (plainText[i][0] == '#') {
break;
}
i++;
}
// 输入密钥
cin >> key;
// 按密钥进行恺撒加密
caesarEncrypt(plainText, cipherText, key);
// 输出密文
for (int j = 0; j < i; j++) {
cout << cipherText[j] << endl;
}
return 0;
}
```
修改说明:
1. `caesarEncrypt` 函数参数需要修改为 `char plainText[][STR_LEN]` 和 `char cipherText[][STR_LEN]`,表示二维字符数组。
2. 在 `caesarEncrypt` 函数中,需要遍历每一行的字符,因此需要加一个外层循环。
3. 在 `caesarEncrypt` 函数中,判断小写字母和大写字母的方式需要修改。
4. 在 `caesarEncrypt` 函数中,需要将明文复制到密文中。
5. 在 `main` 函数中,需要输入明文并以 # 结束。
6. 在 `main` 函数中,需要输出每一行的密文。
阅读全文