繁体   English   中英

如何检查 C 中字符串中的双字符?

[英]How to check for double characters in a string in C?

我正在尝试为 CS50 的问题集 2 实施程序。

我的程序必须接受单个命令行参数,并且键本身应该不区分大小写,因此键中的任何字符是大写还是小写都不会影响我的程序的行为。

如果密钥无效(如不包含 26 个字符、包含任何非字母字符或每个字母不只包含一次),您的程序应该打印一条错误消息,指出“密钥必须包含 26 个字符”。

对于有效值,我仍然收到错误消息,而不是“正确”。 请在下面查看我的代码。

我对编程很陌生。 任何帮助将不胜感激。 谢谢!

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

bool valid_key(string s);
bool single_letter(string s);

int main(int argc, string argv[])
{
    if (argc != 2)
    {
        printf("Usage: ./substitution key\n");
        return 1;
    }
    else if (! valid_key(argv[1]))
    {
        printf("Key must contain 26 characters.\n");
        return 1;
    }
    printf("Correct\n");

    string plaintext = get_string("plaintext: ");

}

bool single_letter(string s)
{
    for (int i = 0, len = strlen(s); i < len; i++)
    {
        for (int j = i + 1; j < len; i++)
        {
            if (s[i] == s[j] || s[i] == ' ')
            {
                return false;
            }
        }
    }
    return true;
}

bool valid_key(string s)
{
    for (int i = 0, len = strlen(s); i < len; i++)
    {
        if (!isalpha(s[i]) || len != 26 || ! single_letter(s))
        {
            return false;
        }
    }
    return true;
}

问题在于你的 for 循环,当你应该上升到 len - 1 时,你会上升到 len。当你检查 isalpha(s[len]) 时,你正在检查 isalpha("\0") 这将总是返回假。

编辑:正如 Sai Sreenivas 指出的另一个错误是内部循环应该是 j++ 而不是 i++

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM