用c语言密码问题:先输入数字k(0<k<10),再将输入的一行字符中的每个英文字母按照其后续的第K个字母输出,字母超出最后个“Z”或“z”时,循环转换,数字不转换。请编程实现。 例如:输入 k=3 字符串为:6care8fully 输出:6fduhgixoob
时间: 2024-09-19 12:06:26 浏览: 64
在 C 语言中,我们可以使用数组和字符索引来实现这个密码问题。首先,我们需要创建一个字符数组 `shift` 来存储字母表的移位后的顺序。然后,我们遍历输入字符串,对于每个字母,如果它是大写字母,就从 'A' 开始加上 k 的值,如果是小写字母则从 'a' 开始,同时处理 wrap-around 的情况。数字字符不做任何处理。
下面是一个简单的示例程序:
```c
#include <stdio.h>
#include <string.h>
char shift(char c, int k) {
if (c >= 'A' && c <= 'Z') {
return ((c - 'A' + k) % 26) + 'A';
} else if (c >= 'a' && c <= 'z') {
return ((c - 'a' + k) % 26) + 'a';
}
return c; // 数字和非字母字符保持不变
}
void encrypt_string(int k, char *str) {
int len = strlen(str);
for (int i = 0; i < len; ++i) {
str[i] = shift(str[i], k);
}
printf("%s", str); // 输出加密后的字符串
}
int main() {
int k;
printf("请输入数字 k(0<k<10): ");
scanf("%d", &k);
if (k < 0 || k >= 10) {
printf("错误:k 应该在 0 到 9 之间。\n");
return 1;
}
char input[100];
printf("请输入一行字符: ");
fgets(input, sizeof(input), stdin); // 防止末尾换行符
input[strlen(input) - 1] = '\0'; // 移除末尾换行符
encrypt_string(k, input);
return 0;
}
```
运行此程序时,它会提示用户输入 k 和字符串。注意,为了防止用户直接输入换行符,这里使用了 `fgets` 而不是 `scanf` 读取输入。
阅读全文