C语言 我想用指针和字符串做一个程序,我怎么能修复它?

jjjwad0x  于 2023-04-05  发布在  其他
关注(0)|答案(1)|浏览(87)

我想把一个字符串指针接收到一个函数中,最多有50个字符和n(数字),反转它,每个字母都被它后面的n个字母所取代,根据A-B(以循环的形式-Z后面会有A)。
这就是我试图做的,它不工作,我种植:

#define MAX 50
void decrypt(char* cipher, int n);
int main(void)
{
    int n = 0;
    char cipher[MAX] = { "\0" };
    printf("Enter cipher to decrypt: ");
    fgets(cipher, sizeof(cipher), stdin);
    scanf("Enter decryption key: %d", n);
    decrypt(cipher, n);

    getchar();
    return 0;
}

void decrypt(char* cipher, int n)
{
    int j = 0;
    int leng = strlen(cipher);
    for (int i = leng - 1; i >= 0; i--) 
    {
            printf("%c", *(cipher + (i + n)));
    }

}

从输入abc2,我期望输出edc,我得到cba

oyt4ldly

oyt4ldly1#

你的代码有很多问题。正如Jabberwocky指出的,你应该在编译时启用所有警告(类似于这样:gcc program.c -Wall
以下是您需要做的事情:

  • 包括stdinstdio.h
  • 包括strlenstring.h
  • cipher声明为指向数组的指针,在c中它已经是指针
  • 使用scanf时,需要传入一个指向n的指针
  • strlen接受指针,而不是指针指针
  • scanf只接受格式(“%d”表示数字),不像python中的input
  • 您在cipher中的代码有点混乱。

以下是所有这些放在一起:

#include <stdio.h>
#include <string.h>

#define MAX 50

void decrypt(char* cipher, int n);

int main(void)
{
    int n = 0;
    char cipher[MAX] = { "\0" };
    printf("Enter cipher to decrypt: ");
    fgets(cipher, sizeof(cipher), stdin);
    printf("Enter decryption key: ");
    scanf("%d", &n);
    decrypt(cipher, n);

    getchar();
    return 0;
}

void decrypt(char* cipher, int n)
{
    for (int i = strlen(cipher) - 1; i >= 0; i--) 
    {
        char c = cipher[i];

        // If c is lowercase and becomes higher than "z", wrap around to "a"
        if (c >= (int)'a' && c <= (int)'z' && c + n > (int)'z') {
            c -= 26;
        }
        // If c is uppercase and higher than "Z", wrap around to "A"
        else if (c >= (int)'A' && c <= (int)'Z' && c + n > (int)'Z') {
            c -= 26;
        }

        c += n;

        printf("%c", c);
    }
}

相关问题