为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。恺撒密码是一种简单的替换加密技术,将明文中的所有字母都在字母表上偏移offset位后被替换成密文,当offset大于零时,表示向后偏移;当offset小于零时,表示向前偏移。 输入 第一行输入需要进行的解密/加密操作,0表示解密,1表示加密 第二行给出一个以回车结束的非空字符串(少于80个字符) (密文或明文) 第三行输入一个整数offset。 输出 输出加密/解密后的结果字符串。用C语言实现
时间: 2024-02-27 07:58:54 浏览: 62
以下是用C语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
void caesarCipher(char str[], int offset, int isEncrypt) {
int len = strlen(str);
int i;
for (i = 0; i < len; i++) {
if (str[i] >= 'A' && str[i] <= 'Z') {
if (isEncrypt) {
str[i] = (str[i] - 'A' + offset) % 26 + 'A';
} else {
str[i] = (str[i] - 'A' - offset + 26) % 26 + 'A';
}
} else if (str[i] >= 'a' && str[i] <= 'z') {
if (isEncrypt) {
str[i] = (str[i] - 'a' + offset) % 26 + 'a';
} else {
str[i] = (str[i] - 'a' - offset + 26) % 26 + 'a';
}
}
}
}
int main() {
int isEncrypt;
char str[81];
int offset;
scanf("%d%s%d", &isEncrypt, str, &offset);
if (isEncrypt) {
caesarCipher(str, offset, 1);
printf("%s\n", str);
} else {
caesarCipher(str, offset, 0);
printf("%s\n", str);
}
return 0;
}
```
输入格式为:
```
<isEncrypt> <str> <offset>
```
其中`isEncrypt`为0表示解密,为1表示加密;`str`为要加密/解密的字符串;`offset`为偏移量。
输出为加密/解密后的字符串。
例如,输入:
```
1 Hello, world! 5
```
表示对字符串`Hello, world!`进行加密,偏移量为5。输出为:
```
Mjqqt, btwqi!
```
再例如,输入:
```
0 Mjqqt, btwqi! 5
```
表示对字符串`Mjqqt, btwqi!`进行解密,偏移量为5。输出为:
```
Hello, world!
```
阅读全文