#include <stdio.h>
int main()
#include <stdio.h>
int main()
{
char msg[31] = {'\0'};
char encrypted[31] = {'\0'};
int key;
printf("Please enter a message under 30 characters: ");
fgets(msg, 31, stdin);
printf("Please enter an encryption key: ");
scanf("%d", &key);
int i = 0;
while (msg[i] && ('a' <= msg[i] <= 'z' || 'A' < msg[i] < 'Z'))
{
encrypted[i] = (msg[i] + key);
i++;
}
printf("%s\n", msg);
printf("%d\n", key);
printf("%s\n", encrypted);
}
好的,我有我的代码来增加字符,但我不知道如何让它忽略特殊的字符和空格。另外,我如何使用%
循环回'a'
和'A'
?
谢谢。
答案 0 :(得分:0)
scanf
和fgets
似乎很好用。
在C中,字符串只是一个字符数组。因此,您使用for
循环和数组索引访问每个元素:
for (int i = 0; i < strlen(str); i++) {
char thisChar = str[i];
//Do the processing for each character
}
您可以根据需要对thisChar
执行算术运算,但请注意不要超过255.您可能需要检查key
以确保它不会太大。
答案 1 :(得分:0)
您只需要一个简单的for
循环:
for (int i = 0; i < 31; i++)
{
// operate on msg[i]
}
如果你不知道字符串的长度,你可能更喜欢检测空终止符的while
循环:
int i = 0;
while (msg[i])
{
// operate on msg[i]
i++;
}
您的fgets
和scanf
可能还不错,但就个人而言,我在阅读输入时会保持一致,而fgets
就是这一切。然后,您可以sscanf
稍后获取key
。
答案 2 :(得分:0)
从scanf获取字符串:
char msg[31];
scanf("%30s", msg);
OR(效率较低,因为你必须先用0填充数组)
char msg[31] = { 0 };
scanf("%30c", msg);
迭代字符串就像循环一样容易(确保使用c99或c11)
int len = strlen(msg);
for(int i = 0; i < len; i++) {
char current = msg[i];
//do something
msg[i] = current;
}
“加密”(即加密)一个角色需要几个步骤
我可以在这里给你代码,但是你不会自己学习任何东西。相反,我鼓励您根据我上面提供的步骤实现密码。
请注意,您可以执行以下操作:
char c = 'C';
char e = 'E' + 2;
char lower_c = 'C' - 'A' + 'a';