C语言用原来的字母后面第5个字母代替原来的字母,包括大写
时间: 2024-09-29 14:05:42 浏览: 26
在C语言中,如果你想要同时处理大小写字母,可以稍微修改之前的解决方案。由于大写字母对应的位置不是连续的,我们需要两个独立的字符映射表,一个用于大写字母,另一个用于小写字母。以下是更新后的代码:
```c
#include <stdio.h>
#include <ctype.h> // 使用ctype_h库中的isupper函数判断是否大写字母
// 定义两个字符映射表,分别处理大写和小写字母
static char upper_mapping[] = "FGHIJKLMNOPQRSTUVWXYZBCDFGHJKLMNPQRSTVWXYZABCDEFGHIJKLMNO PQRSTUVWXYZABCDEFGHIJKLMNOQRSTUVWXY ABCDEFGHIJKLMNOPQRSTUVWXYZBCDFGHJKLMNPQRSTVWXYZ";
static char lower_mapping[] = "fg hijklmnopqrstuvwxyzijnopqrstuvwxyzklmnopqrstuvwxyzlmnopqrstuvwxyzmnopqrstuvwxyznopqrstuvwxyzijkl mnopqrstuvwxyzijklmnopq rstuvwxyzabcdefghijklmno pqrstuvwxyzijklmnopqrstuvwxy zabcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxyzijnopqrstuvwxyzklmnopqrstuvwxyzlmnopqrstuvwxyzmnopqrstuvwxyznopqrstuvwxyzijkl mnopqrstuvwxyzijklmnopq rstuvwxyz";
char encrypt(char input_char) {
if (isupper(input_char)) { // 判断是否大写字母
return upper_mapping[(input_char - 'A') + 5];
} else if (islower(input_char)) { // 判断是否小写字母
return lower_mapping[(input_char - 'a') + 5];
} else { // 对于非字母字符不做处理
return input_char;
}
}
void encrypt_password(char password[], int length) {
for (int i = 0; i < length; ++i) {
password[i] = encrypt(password[i]);
}
}
int main() {
char password[5]; // 长度包括结尾的'\0'
printf("请输入4位密码: ");
fgets(password, sizeof(password), stdin);
password[strcspn(password, "\n")] = '\0';
// 确保密码长度为4位
if (strlen(password) == 4) {
encrypt_password(password, strlen(password));
printf("加密后的密码: %s\n", password);
} else {
printf("错误: 密码长度必须为4位。\n");
}
return 0;
}
```
现在,这个程序能正确处理大写字母了。
阅读全文