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

Arrays 如何在C中检查字符串中的双字符?,arrays,c,string,cs50,Arrays,C,String,Cs50,我正在尝试为CS50的习题集2实施一个程序 我的程序必须接受单个命令行参数,并且键本身应该不区分大小写,因此键中的任何字符是大写还是小写都不应影响程序的行为 如果密钥无效(如不包含26个字符、包含任何非字母字符的字符或不包含每个字母一次),则程序应打印一条错误消息,说明“密钥必须包含26个字符” 对于有效值,我仍然得到错误消息,而不是“Correct”。请看下面我的代码 我对编程很陌生。任何帮助都将不胜感激。谢谢 #include <cs50.h> #include <stdi

我正在尝试为CS50的习题集2实施一个程序

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

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

对于有效值,我仍然得到错误消息,而不是“Correct”。请看下面我的代码

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

#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;
}
#包括
#包括
#包括
#包括
布尔有效_键(字符串s);
布尔单字母(字符串s);
int main(int argc,字符串argv[])
{
如果(argc!=2)
{
printf(“用法:./substitution key\n”);
返回1;
}
如果(!有效的_键(argv[1]),则为else
{
printf(“密钥必须包含26个字符。\n”);
返回1;
}
printf(“正确的\n”);
字符串明文=获取字符串(“明文:”);
}
布尔单字母(字符串s)
{
对于(int i=0,len=strlen;i
问题在于for循环,当您应该升到len-1时,您将升到len。当您检查isalpha(s[len])时,您正在检查isalpha(“\0”),这将始终返回false


编辑:正如Sai Sreenivas指出的,另一个错误是,第二个for循环中的函数应该是
j++
而不是i++