gpt4 book ai didi

c - Vigenere 测试失败 :( encrypts "BaRFoo" as "CaQGon" using "BaZ" as keyword

转载 作者:行者123 更新时间:2023-11-30 19:28:46 27 4
gpt4 key购买 nike

有人可以帮我用我的代码来解决上面的这个错误吗?我已经搜索了答案,但它们与我的代码有点不同。

  • vigenere.c 编译。
  • 使用“a”作为关键字将“a”加密为“a”
  • 使用“baz”作为关键字将“barfoo”加密为“caqgon”
  • 使用“BaZ”作为关键字将“BaRFoo”加密为“CaQGon”
    失败预期的“密文:CaQ...”,而不是“密文:CaQ...”
  • 使用“BAZ”作为关键字将“BARFOO”加密为“CAQGON”
  • 加密“world!$?”如“xoqmd!$?”使用“baz”作为关键字
  • 加密“你好,世界!”如“iekmo,vprke!”使用“baz”作为关键字
  • 处理缺少 argv[1]
    失败由于段错误而无法执行程序
  • 处理 argc > 2
  • 拒绝“Hax0r2”作为关键字

#include<stdio.h>
#include<cs50.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>


int main(int argc,string argv[])
{
for (int k = 0;k<strlen(argv[1]);k++)
{
if (isalpha(argv[1][k]))
{}
else
{
return EXIT_FAILURE;
}
}
if (argc == 2)
{
int alpha,cipher,key,j=0,len=strlen(argv[1]);
char a;
string plaintext = get_string("Text: ");
printf("ciphertext: ");
for (int i = 0; i<strlen(plaintext) ; i++)
{
if (isalpha(plaintext[i]))
{
if (isupper(plaintext[i]))
{
alpha = plaintext[i]-65;
key = argv[1][j]-65;
cipher = (key+alpha)%26;
a = (char) cipher+65;
printf("%c",a);
j=(j+1)%len;

}
else if (islower(plaintext[i]))
{
alpha = plaintext[i]-97;
key = argv[1][j]-97;
cipher = (key+alpha)%26;
a = (char) cipher+97;
printf("%c",a);
j=(j+1)%len;
}

}
else
{
printf("%c",plaintext[i]);
}
}
printf("\n");
}
else
{
printf("error\n");
return EXIT_FAILURE;
}
}

最佳答案

您的代码可以正确处理明文中的大小写字母,但无法正确处理关键字中的不同大小写字母。当您处理大写纯文本字母时,您可以从关键字字母中减去 65,即使它可能不是大写。

您只需将所有关键字字母转换为常见大小写,然后从中减去相应的第一个字母即可获得增加的金额。

也无需检查islower()——如果它不是大写,则必须是小写。所以只需使用else即可。

            if (isupper(plaintext[i]))
{
alpha = plaintext[i]-'A';
key = toupper(argv[1][j])-'A';
cipher = (key+alpha)%26;
a = (char) cipher+'A';
printf("%c",a);
j=(j+1)%len;

}
else
{
alpha = plaintext[i]-'a';
key = toupper(argv[1][j])-'A';
cipher = (key+alpha)%26;
a = (char) cipher+'a';
printf("%c",a);
j=(j+1)%len;
}

要修复由于缺少 argv[1] 导致的段错误,请将检查关键字是否全部按字母顺序排列的循环移至 if (argc == 2) 中> 阻止。然后,您还可以使用 len 变量,而不是在循环中重复 strlen(argv[1])

关于c - Vigenere 测试失败 :( encrypts "BaRFoo" as "CaQGon" using "BaZ" as keyword,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53643027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com