为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。恺撒密码是一种简单的替换加密技术,将明文中的所有字母都在字母表上偏移offset位后被替换成密文,当offset大于零时,表示向后偏移;当offset小于零时,表示向前偏移。oj题答案c语言
时间: 2024-03-10 16:51:23 浏览: 142
这是一道简单的凯撒密码加密题目,要求对输入的字符串进行加密,输出加密后的密文。以下是参考代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 80
void encrypt(char *plaintext, int offset);
int main()
{
char plaintext[MAX_LEN+1];
int offset;
printf("Enter plaintext: ");
fgets(plaintext, MAX_LEN+1, stdin);
printf("Enter offset: ");
scanf("%d", &offset);
encrypt(plaintext, offset);
printf("Encrypted text: %s\n", plaintext);
return 0;
}
void encrypt(char *plaintext, int offset)
{
int len = strlen(plaintext);
int i;
for(i = 0; i < len; i++)
{
if(plaintext[i] >= 'a' && plaintext[i] <= 'z')
{
plaintext[i] = 'a' + ((plaintext[i]-'a'+offset)%26+26)%26;
}
else if(plaintext[i] >= 'A' && plaintext[i] <= 'Z')
{
plaintext[i] = 'A' + ((plaintext[i]-'A'+offset)%26+26)%26;
}
}
}
```
该代码中,`encrypt`函数实现凯撒密码的加密功能,输入明文和偏移量后,调用`encrypt`函数加密明文,输出密文。
需要注意的是,该代码中默认密文和明文都不包含空格和其他非字母的字符。如果需要支持空格和其他字符,可以修改`encrypt`函数的实现。此外,需要注意对于负数的处理,需要将结果加上26再取模,以保证结果为正数。
阅读全文