gpt4 book ai didi

CS50 PSet 2 - Vigenere - 确保关键字按字母顺序排列

转载 作者:行者123 更新时间:2023-11-30 15:01:04 28 4
gpt4 key购买 nike

我目前正在使用 C 语言研究 CS50 中的维吉尼亚密码。要求是制作一个程序,根据关键字(两者都是用户输入的)对一些明文进行加密。它将基于维吉尼亚密码进行加密。我发现很难用语言描述 Vigenere 密码是什么,所以这里是 CS50 规范中的一个示例:

如果 Vigenère 本人想 secret 地与某人打招呼,使用关键字 ABC,他会用 key 0 加密 H(即 A),用 key 1 加密 E(即 B ),第一个 L 的 key 为 2(即 C),此时他的关键字中的字母将用完,因此他将重用(部分)它来用 key 加密第二个 L再次键为 0(即 A),再次键为 1(即 B)的 O。所以他会把 HELLO 写成 HFNLP。

关键字必须是所有字母组成的字符串,并且必须作为第二个命令行参数给出,即下面代码中的 argv[1] 。我遇到的问题是,如果不是按字母顺序排列的 key ,我无法让程序拒绝该 key ,如果全部按字母顺序排列,则无法让程序继续。我尝试这样做(参见下面的代码),如果我在 argv[1] 中包含一个数字,它不会返回 printf 错误消息。请有人就问题出在哪里提供一些建议?如果格式不太好,请道歉..

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

// declare command line argument variables
int main(int argc, string argv[])
{

string k = argv[1];

//return error if there aren't two command line arguments
if (argc != 2)
{
printf("Usage: ./vigenere k\n");
return 1;
}

//make sure key is all alphabetical
for (int i = 0; i < strlen(k); i++)

{
if(isalpha(k[i]))
{
return 0;
}

else
{
return 1;
printf("Please ensure all characters are alphabetical.\n");
}
}
}

我也尝试过像这样而不是上面的 for 循环内的内容,但它不起作用:

if(!isalpha(k[i]))
{
return 1;
printf("Please ensure all characters are alphabetical.\n");
}

最佳答案

   if(isalpha(k[i]))
{
return 0;
}

一旦 argv[1] 中存在字母表,就退出程序。相反,您希望继续循环,直到检查完所有字符。因此,请执行以下操作:

 for (size_t i = 0; i < strlen(k); i++)
{
if(!isalpha(k[i]))
{
printf("Please ensure all characters are alphabetical.\n");
return 1;
}
}

您还需要在使用argv[1]之前进行参数检查。

if (argc != 2)
{
printf("Usage: ./vigenere k\n");
return 1;
}

string k = argv[1];
...

关于CS50 PSet 2 - Vigenere - 确保关键字按字母顺序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41704547/

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