输入 第一行输入需要进行的解密/加密操作,0表示解密,1表示加密 第二行给出一个以回车结束的非空字符串(少于80个字符) (密文或明文) 第三行输入一个整数offset。 输出 输出加密/解密后的结果字符串。 用C语言编写
时间: 2024-03-14 18:45:42 浏览: 102
以下是用 C 语言编写的代码:
```c
#include <stdio.h>
#include <string.h>
int main()
{
int op;
char str[81];
int offset;
scanf("%d", &op); // 读入加密/解密操作类型
getchar(); // 读取换行符
fgets(str, 81, stdin); // 读入字符串,注意 fgets 函数会把换行符 '\n' 也读入
str[strlen(str) - 1] = '\0'; // 将最后的换行符替换为字符串结束符 '\0'
scanf("%d", &offset); // 读入偏移量
getchar(); // 读取换行符
int len = strlen(str);
int i;
for (i = 0; i < len; i++)
{
char c = str[i];
if (c >= 'a' && c <= 'z') // 如果是小写字母
{
if (op == 1) // 加密操作
c = 'a' + (c - 'a' + offset) % 26;
else // 解密操作
c = 'a' + (c - 'a' - offset + 26) % 26;
}
else if (c >= 'A' && c <= 'Z') // 如果是大写字母
{
if (op == 1) // 加密操作
c = 'A' + (c - 'A' + offset) % 26;
else // 解密操作
c = 'A' + (c - 'A' - offset + 26) % 26;
}
putchar(c); // 输出加密/解密后的字符
}
putchar('\n'); // 输出一个换行符
return 0;
}
```
这里假设只对英文字母进行加密/解密操作,其他字符不变。加密/解密操作用的是 Caesar 密码,即将字符向后偏移一定的量。这里假设偏移量为正整数,加密操作将字符向后偏移,解密操作将字符向前偏移。注意,如果向前偏移的量大于字符本身的位置,需要加上 26 再取模,保证结果为正数。
阅读全文