写一个C语言:为防止信息窃取,需要采用加密技术将电文加密变成密文。恺撒密码是一种简单的替换加密技术,其规则是将明文中的所有字母都在字母表上偏移offset位后被替换成密文:当offset大于零时,表示向后偏移;当offset小于零时,表示向前偏移。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。 输入格式: 从键盘读入一个字符串(少于80个字符),以回车结束。再读入一个整数offset。 输出格式: 输出加密后的字符串。 输入样例1: Hello
时间: 2024-03-03 16:47:59 浏览: 71
以下是使用C语言编写的解答代码:
```
#include <stdio.h>
#include <string.h>
int main()
{
char str[80];
int offset;
// 读入字符串和偏移量
fgets(str, 80, stdin);
scanf("%d", &offset);
// 加密字符串
for (int i = 0; i < strlen(str); i++)
{
// 如果是大写字母
if (str[i] >= 'A' && str[i] <= 'Z')
{
// 计算加密后的字母
int c = str[i] - 'A' + offset;
if (c >= 26) c -= 26;
if (c < 0) c += 26;
// 输出加密后的字母
putchar(c + 'A');
}
// 如果是小写字母
else if (str[i] >= 'a' && str[i] <= 'z')
{
// 计算加密后的字母
int c = str[i] - 'a' + offset;
if (c >= 26) c -= 26;
if (c < 0) c += 26;
// 输出加密后的字母
putchar(c + 'a');
}
// 如果不是字母,直接输出
else
{
putchar(str[i]);
}
}
return 0;
}
```
解题思路:
1. 读入字符串和偏移量,使用 `fgets()` 函数读入一行字符串,存储在字符数组 `str` 中,然后使用 `scanf()` 函数读入偏移量。
2. 遍历字符串,加密字符串,使用 `for` 循环遍历字符串中的每个字符,如果该字符是大写字母或小写字母,则计算加密后的字母并输出,否则直接输出该字符。
3. 计算加密后的字母,如果是大写字母,则将其减去 'A',加上偏移量,然后对 26 取模,最后加上 'A' 输出。如果是小写字母,则将其减去 'a',加上偏移量,然后对 26 取模,最后加上 'a' 输出。
注意事项:
1. 字符串长度不超过80,所以定义字符数组时需要保证数组大小不小于80。
2. 需要使用字符数组来存储读入的字符串,不能使用字符串常量。
3. 在计算加密后的字母时,需要对偏移量进行取模运算,使其在 [0, 25] 的范围内。
阅读全文