#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 a=0; while(cipherText[a][0]!='#') { a=a+1; } int b=0; for(int j=0 ; j<a; j++) { while(cipherText[j][b]!='\0') { b=b+1; } for(int i=0 ; i<b; i++) { plainText[j][i]=cipherText[j][i]; } if (plainText[j][i]!= ';' and plainText[j][i]!= ',') { plainText[j][i] = ((cipherText[j][i]+key-'A')%26)+'A'; } } } /********* End *********/ int main() { char cipherText[MAX_LINE][STR_LEN + 1]; //存储密文 char plainText[MAX_LINE][STR_LEN + 1]; /********* Begin *********/ int key; //存储密钥 key=19; //①输入明文 cin.getline(cipherText, MAX_LINE, STR_LEN); //②输入密钥 cin >> key; //③按密钥进行恺撒加密 caesarEncrypt(plainText, cipherText, key); //④输出密文 cout << plainText << endl; return 0; /********* End *********/ }这个代码哪里有问题
时间: 2023-09-14 17:09:15 浏览: 68
这段代码有几个问题:
1. 在函数`readLine`中,当输入的字符数达到`maxLength`时,应该停止读入,否则会导致数组越界。
2. 在函数`caesarEncrypt`中,变量`i`的作用域只在`for`循环内部,因此在循环外部使用`i`是错误的。
3. 在函数`caesarEncrypt`中,应该先判断当前字符是否为字母,再进行加密,否则非字母字符也会被加密。
4. 在`main`函数中,应该使用`cin.getline`来读入一行密文。
下面是修改后的代码:
```
#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';
}
void caesarEncrypt(char plainText[][STR_LEN + 1], char cipherText[][STR_LEN + 1], int key) {
int a = 0;
while (cipherText[a][0] != '#') {
a = a + 1;
}
for (int j = 0; j < a; j++) {
int i = 0;
while (cipherText[j][i] != '\0') {
if (isalpha(cipherText[j][i])) {
plainText[j][i] = ((cipherText[j][i] + key - 'A') % 26) + 'A';
} else {
plainText[j][i] = cipherText[j][i];
}
i++;
}
}
}
int main() {
char cipherText[MAX_LINE][STR_LEN + 1]; //存储密文
char plainText[MAX_LINE][STR_LEN + 1];
int key;
//输入明文
readLine(cipherText[0], STR_LEN);
//输入密钥
cin >> key;
//按密钥进行恺撒加密
caesarEncrypt(plainText, cipherText, key);
//输出密文
for (int i = 0; i < MAX_LINE; i++) {
if (plainText[i][0] == '\0') {
break;
}
cout << plainText[i] << endl;
}
return 0;
}
```
阅读全文