我是编码新手,并且遇到了来自CS50的密码问题

时间:2020-10-12 18:36:53

标签: c encryption cs50

我是新来的,但仍然掌握了很多东西,因此非常感谢您的帮助。 这是基本问题: 例如,键可以是字符串NQXPOMAFTRHLZGECYJIUWSKDVB。此26个字符的键意味着A(字母的第一个字母)应转换为N(键的第一个字符),B(字母的第二个字母)应转换为Q(字母的第二个字符)键),等等。

然后,像HELLO这样的消息将被加密为FOLLE,根据密钥确定的映射替换每个字母。

这是我的尝试:

#include<stdio.h>
#include<string.h>
#include <stdlib.h>
char convert(char c, char *p);
int main(int argc, char *argv[]){
    //argv[1] has the key.
    printf("THE KEY:\n%s\n",argv[1]);
    char *ptr;
    ptr=(char*)malloc(50);
    printf("Enter the string to be encoded:\n");
    scanf("%s",ptr);
    printf("%s\n",ptr);
    char ch;
    for(int i=0;i<strlen(ptr);i++)
    {
        ch=*ptr;
        ch=convert(ch,&argv[1][0]);
        *ptr=ch;
        ptr++;
    }
    printf("Encoded string is:\n");
    printf("%s",ptr);
    return 0;
}

char convert(char c, char *p)
{
    char x='a';
    char y='A';
    for(int i=0;i<=25;i++)
    {
        if(x==c||y==c)
        {
            return (*p);
        }
        ++x;
        ++y;
        ++p;
    }
}

这里是输出:

 PS C:\Users\Shreyansh\Desktop\CS TUTORIALS\CS50> .\06_Cipher.exe NQXPOMAFTRHLZGECYJIUWSKDVB
THE KEY:
NQXPOMAFTRHLZGECYJIUWSKDVB
Enter the string to be encoded:
HELLO
HELLO
Encoded string is:
LO

由于某种原因,输出将在那里停止。请帮忙。我不知道我在做什么错。

1 个答案:

答案 0 :(得分:0)

您的代码中有几个问题:

  1. 激活并阅读编译器上的警告,这将对您有很大帮助。

  2. 没有内存与ptr

    关联

    您应该写类似

    char mem[10];
    char * ptr = mem;
    
  3. 您使用ptr作为参考和循环变量

    您修改了ptr以读取您的字符串(ptr++),但是最后,您写了ptrprintf("%s",ptr);,在这种情况下,您没有写转换的内容。

  4. 来自2。在strlen(ptr)条件下的for是错误的:第一步是可以的(strlen("Hello") == 5),但是之后,它是错误的:{ {1}} ...

  5. strlen("ello") !=5函数中,提出以下问题:

    • 如果您的参数不符合要求,会发生什么?
    • 如果要转换的字符不是字母怎么办?

按char读取字符串char的一种好方法是使用以下惯用语言:

convert