优化这段代码/*------------------------------------------------------ 注意:仅在标有"Begin"和"End"的注释行之间补充填写代码, 请勿改动任何已有内容。 ------------------------------------------------------*/ #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-29 15:05:03 浏览: 59
优化后的代码如下:(注释中标明了修改的部分)
```
#include <iostream>
using namespace std;
#define STR_LEN 80
#define MAX_LINE 20
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 i = 0; i < MAX_LINE && plainText[i][0] != '#'; i++) { //循环次数不应超过MAX_LINE
for (int j = 0; plainText[i][j] != '\0'; j++) {
if (plainText[i][j] >= 'a' && plainText[i][j] <= 'z') { //只有小写字母才需要转换为大写
plainText[i][j] -= 32;
}
if (plainText[i][j] >= 'A' && plainText[i][j] <= 'Z') {
plainText[i][j] -= key;
if (plainText[i][j] < 'A') { //处理循环移位
plainText[i][j] += 26;
}
}
}
strcpy(cipherText[i], plainText[i]); //将明文复制到密文数组中
}
}
/********* End *********/
int main() {
char plainText[MAX_LINE][STR_LEN];
char cipherText[MAX_LINE][STR_LEN];
int key;
for (int i = 0; i < MAX_LINE; i++) { //循环次数不应超过MAX_LINE
readLine(plainText[i], STR_LEN);
if (plainText[i][0] == '#') {
break;
}
}
cin >> key;
caesarEncrypt(plainText, cipherText, key);
for (int i = 0; i < MAX_LINE && plainText[i][0] != '#'; i++) { //循环次数不应超过MAX_LINE
cout << cipherText[i] << endl;
}
return 0;
}
```
主要的修改如下:
1. 修改了 `caesarEncrypt` 函数的参数列表,使用二维字符数组来存储明文和密文。
2. 在 `caesarEncrypt` 函数中,使用两层循环分别遍历每个明文字符串和其中的每个字符。将小写字母转换为大写字母时,只有当字符在 'a' 和 'z' 之间时才需要转换,使用字符常量来比较即可。当字符在 'A' 和 'Z' 之间时,先减去密钥,再根据需要进行循环移位。最后将明文复制到密文数组中。
3. 在 `main` 函数中,使用循环来读取多行明文字符串,循环次数不应超过 `MAX_LINE`。当输入的明文字符串以 '#' 开头时,停止读取。
4. 在输出密文时,同样使用循环来遍历每个密文字符串,循环次数不应超过 `MAX_LINE`。当输出的密文字符串以 '#' 开头时,停止输出。
阅读全文
相关推荐


















