c语言输入一个以回车结束的字符串(少于80个字符),将其中的大写字母用下面的规则进行加密处理,其余字符不变,输出加密后的字符串。 加密规则:A变成Z,B变成Y....... ,其他字符不变。
时间: 2023-06-10 17:08:27 浏览: 128
下面是一个简单的 C 语言程序实现该加密规则:
```c
#include <stdio.h>
#include <ctype.h>
int main() {
char str[80];
printf("请输入字符串:");
fgets(str, sizeof(str), stdin);
printf("加密后的字符串为:");
for (int i = 0; str[i] != '\0' && str[i] != '\n'; i++) {
if (isupper(str[i])) {
putchar('Z' - (str[i] - 'A'));
} else {
putchar(str[i]);
}
}
return 0;
}
```
程序的思路如下:
1. 首先用 `fgets()` 函数读取输入的字符串,保证不会超过 80 个字符;
2. 然后遍历字符串,对于每个字符,如果是大写字母,则进行加密处理,否则不变;
3. 加密处理时,将字符距离 'A' 的距离减去 'Z',得到的结果就是加密后的字符;
4. 最后用 `putchar()` 函数输出加密后的字符串。
相关问题
写一个C语言:为防止信息窃取,需要采用加密技术将电文加密变成密文。恺撒密码是一种简单的替换加密技术,其规则是将明文中的所有字母都在字母表上偏移offset位后被替换成密文:当offset大于零时,表示向后偏移;当offset小于零时,表示向前偏移。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。 输入格式: 从键盘读入一个字符串(少于80个字符),以回车结束。再读入一个整数offset。 输出格式: 输出加密后的字符串。 输入样例1: Hello
以下是使用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] 的范围内。
C语言输入一个以回车符为结束标志的字符串(明文,少于80个字符)存放在字符数组s中,再输入一个正整数密钥n,将s中所有的大、小写字母用其后第n个字母替换,遇到“z”或者“Z”则向前折返到“a”或“A”,最后将加密后的字符串输出。
以下是实现该功能的 C 代码:
```c
#include <stdio.h>
#include <ctype.h> // 包含 isupper 和 islower 函数的头文件
int main() {
char s[81]; // 字符串数组
int n; // 密钥
printf("请输入明文字符串(少于80个字符):");
scanf("%[^\n]", s); // 输入字符串,%[^\n] 表示输入到遇到回车符为止
printf("请输入密钥(正整数):");
scanf("%d", &n);
// 加密字符串
for (int i = 0; s[i]; i++) {
if (isupper(s[i])) { // 大写字母
s[i] = ((s[i] - 'A') + n) % 26 + 'A'; // 替换
} else if (islower(s[i])) { // 小写字母
s[i] = ((s[i] - 'a') + n) % 26 + 'a'; // 替换
}
}
// 输出加密后的字符串
printf("加密后的字符串为:%s\n", s);
return 0;
}
```
需要注意的是,这里使用了 `isupper` 和 `islower` 函数来判断字符是否为大写或小写字母。同时,为了保证对于字符串中的空格和其他非字母字符不做处理,使用了 `%[^\n]` 的格式化字符来输入字符串。
阅读全文