当前位置: 首页 > 知识库问答 >
问题:

cs50 pset2 caesar--验证密钥

姜森
2023-03-14

我正在经历cs50,我被困在pset2凯撒。我按照指示一步一步地进行,我已经通过了关于验证密钥的部分——确保命令行参数只是一个数字(./caesar 20),如果不是(./caesar 20x或。/caesar xyz),则打印出用法:/caesar密钥\n.但一旦我添加下一行提示用户输入明文,然后打印回密文,它似乎不会注册验证密钥的前几行。我知道哈佛大学的学术诚信政策,所以我更多地是在寻求这方面的提示/帮助/解释。我已经在下面发布了我的代码,非常感谢您的帮助。

int main(int argc, string argv[])       
{

        int i = 0;
        if(isalpha(argv[1][i]))
        {
            printf("Usage: ./caesar key\n");
            return 1;
        }
        else
        {
            int key = atoi(argv[1]);
            string text = get_string("plaintext: ");
            printf("ciphertext: ");
            int n = strlen(text);
            for(i = 0; i < n; i++)
            {
                if(isupper(text[i]))
                {
                    printf("%c", (((text[i] - 65) + key) % 26) + 65);
                }
                else if(islower(text[i]))
                {
                    printf("%c", (((text[i] - 97) + key) % 26) + 97);
                }
                else
                {
                    printf("%c", text[i]);
                }
            }
    }
    printf("\n");
    return 0;
} 

共有2个答案

施阳曜
2023-03-14

你必须在命令行参数中检查2件事。1.检查你是否有2个参数。(这在你的程序中没有检查)2.检查它是否不是字母表...由于第二个参数自动是一个字符串(由于字符串artv[]),你必须首先将其转换为整数. ---- 这滋生了你必须通过以下方式来处理的子问题: 2. a.逐个检查字符串(每个字符),所有必须是一个整数。2. B。如果至少有一个是字符,那么返回false...

2.A.和2。B.应该嵌套在一个单独的函数中,该函数将返回一个布尔值(T/F),然后从该布尔值将这两个布尔表达式括在while循环中。

我的回答晚了2个月,但是因为我刚刚完成了这个问题,我想也许有人会遇到和我一样的困难,所以希望有人能读到这篇文章并帮助他们。:)

祁刚毅
2023-03-14

您需要重新进行输入验证。

  1. 它不能确保在命令行中提供一个参数。
  2. 它只是验证artv[1]的第一个字符。程序应该测试参数的每个字符都是数字(请参见man isdigit)。isalpha()不是一个好的测试。如果用户输入$怎么办?

不清楚程序何时不工作,但基于这些缺陷,这将无法通过校验50。

 类似资料:
  • 问题内容: 因此,我必须创建验证密码是否有效的代码: 至少8个字符长 包含至少1个数字 包含至少1个大写字母 这是代码: 我不确定出什么问题,但是当我输入带有数字的密码时-它会一直告诉我我需要一个带有数字的密码。有什么办法吗? 问题答案: 您可以将模块用于正则表达式。 有了它,您的代码将如下所示:

  • 主要内容:使用方式,实例演示jQuery Password Validation(密码验证)插件扩展了 jQuery Validate 插件,提供了两种组件: 一种评价密码的相关因素的功能:比如大小写字母的混合情况、字符(数字、特殊字符)的混合情况、长度、与用户名的相似度(可选的)。 一种使用评价功能显示密码强度的验证插件自定义方法。显示的文本可以被本地化。 您可以简单地自定义强度显示的外观、本地化消息显示,并集成到已有的表

  • 问题内容: 我有一个字段,例如,在表中应该是唯一的。 使用Spring / Hibernate验证进行验证的最佳方法是什么? 问题答案: 一种可能的解决方案是创建自定义约束(和相应的验证器)。并要查找数据库中的现有记录,请提供(或Hibernate)to 的实例。 EntityManagerAwareValidator ConstraintValidatorFactoryImpl 唯一键 Uniq

  • 我知道SAML是如何用于单点登录(SSO)的。也就是说,从SP重定向到IDP,并从SAML响应/断言获取用户身份。 我的问题是-SAML 2.0规范是否定义了如何将用户名和密码作为SAML请求xml的一部分进行身份验证?请注意,我不是在谈论单点登录,只是想要用户名/密码的身份验证。 谢谢,

  • 所以问题是:应该如何正确验证密码?