我是新来的,但仍然掌握了很多东西,因此非常感谢您的帮助。 这是基本问题: 例如,键可以是字符串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
由于某种原因,输出将在那里停止。请帮忙。我不知道我在做什么错。
答案 0 :(得分:0)
您的代码中有几个问题:
激活并阅读编译器上的警告,这将对您有很大帮助。
没有内存与ptr
您应该写类似
char mem[10];
char * ptr = mem;
您使用ptr
作为参考和循环变量
您修改了ptr以读取您的字符串(ptr++
),但是最后,您写了ptr
:printf("%s",ptr);
,在这种情况下,您没有写转换的内容。
来自2。在strlen(ptr)
条件下的for
是错误的:第一步是可以的(strlen("Hello") == 5
),但是之后,它是错误的:{ {1}} ...
在strlen("ello") !=5
函数中,提出以下问题:
按char读取字符串char的一种好方法是使用以下惯用语言:
convert