代码之家  ›  专栏  ›  技术社区  ›  rborum

查找字符串中字符的结尾

  •  0
  • rborum  · 技术社区  · 7 年前

    我在写一个凯撒密码,它将数组中每个字符的值移位一个固定的量。我遇到的问题是字符串后面的字符值也在移位。 我希望完全忽略这些值/不打印它们。

    必须 取这些精确的参数,所以我不能将长度也传递给它。

    #include <stdio.h>
    
    void encrypt(char *message, int shift);
    
    int main(void)
    {
        int shift_amount;
        int length;
        char message[80];
        char c;
    
        printf("Enter message to be encrypted: ");
        for (length = 0; ( c = getchar()) != '\n'; length++) {
            message[length] = c;
        }
    
        printf("Enter shift amount (1-25): ");
        scanf("%d", &shift_amount);
    
        encrypt(message, 3);
    
        return 0;
    }
    
    void encrypt(char *message, int shift){
        printf("Encrypted message: ");
        for (int i = 0; i < 80; i++) {
            char ch = message[i];
    
            if (message[i] >= 'a' && message[i] <= 'z') {
                ch = (( ch - 'a' ) + shift) % 26 + 'a';
            } else if (message[i] >= 'A' && message[i] <= 'Z') {
                ch = (( ch - 'A' ) + shift) % 26 + 'A';
            }
            printf("%c", ch);
        }
        printf("\n");
    }
    

    理想的输入/输出示例如下:

    输入:“继续,做我的一天。”3班

    输出:“Jr dkhdg,pdnh pb gdb。”

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  3
  •   pqnet    7 年前

    与其只修改80个字符,不如在到达字符串末尾时停止。你怎么知道字符串的结尾是什么时候?因为字符串结束后的第一个字符将是字符串终止符,即。 '\0'

    在代码中,可以通过替换 for 条件,从 i<80 message[i] != '\0' ,或者如果要指定最大长度,请同时使用这两个条件。

    printf("Enter message to be encrypted: ");
    for (length = 0; ( c = getchar()) != '\n'; length++) {
        message[length] = c;
    }
    message[length] = '\0'; // <- add this here 
    
    推荐文章