1
#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'

谢谢你。

4

3 回答 3

0

从 scanf 获取字符串:

char msg[31];
scanf("%30s", msg);

或(效率较低,因为您必须先用 0 填充数组)

char msg[31] = { 0 };
scanf("%30c", msg);

迭代字符串与 for 循环一样简单(请务必使用 c99 或 c11)

int len = strlen(msg);
for(int i = 0; i < len; i++) {
    char current = msg[i];
    //do something
    msg[i] = current;
}

“加密”(即加密)一个字符需要几个步骤

  1. 确定我们是否有大写字符、小写字符或非字母字符
  2. 确定字母表中的位置(如果是字母表)。
  3. 使用模运算符 (%) 更新位置
  4. 更正位置,如果是字母

我可以在这里给你代码,但是你不会从自己做的事情中学到任何东西。相反,我鼓励您根据我上面提供的步骤来实现密码。

请注意,您可以执行以下操作:

char c = 'C';
char e = 'E' + 2; 
char lower_c = 'C' - 'A' + 'a';
于 2013-01-28T22:46:01.223 回答
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以确保它不会变得太大。

于 2013-01-28T22:31:51.033 回答
0
  1. 你只需要一个简单的for循环:

    for (int i = 0; i < 31; i++)
    {
        // operate on msg[i]
    }
    

    如果您不知道开始字符串的长度,您可能更喜欢while检测空终止符的循环:

    int i = 0;
    while (msg[i])
    {
        // operate on msg[i]
        i++;
    }
    
  2. 你的fgetsscanf可能很好,但就个人而言,我在阅读输入时会保持一致,并且fgets对于这一切。然后你可以稍后出去sscanfkey

于 2013-01-28T22:32:01.470 回答