理解字母或数字功能检查C

时间:2013-03-18 11:53:36

标签: c character

这些功能检查了什么?

根据我的理解,他们应该检查一个单词是否包含非字母数字字符。 我不明白它是如何做到的。

我的理解:

  • 首先检查长度 - 这没关系。
  • 第二项检查是字符是否为字母:
  • IsLetter(symbol[0]))评估为FALSE。这在逻辑上是否定的。
  • 第三项功能与上述功能相同。

我不明白,是第四个: IsLetterOrDigit(*symbol))

如何检查单词是否包含非字母数字字符?

代码:

int IsSymbolValid(char* symbol)
{
    int len = strlen(symbol);

    if ((len == 0) || (len > MAX_SYMBOL_SIZE))
    {
        strcpy(LastParsingError, "Invalid symbol length");
        return 0;
    }

    if (!IsLetter(symbol[0]))
    {
        strcpy(LastParsingError, "Symbol name has to start with letter");
        return 0;
    }

    while (*symbol != 0)
    {
        if (IsLetterOrDigit(*symbol))
        {
            strcpy(LastParsingError, "Symbol name can contain only letters and digits");
            return 0;
        }
        ++symbol;
    }

    return 1;
}

int IsLetter(char ch)
{
    return (((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')));
}

int IsDigit(char ch)
{
    return ((ch >= '0') && (ch <= '9'));
}

int IsLetterOrDigit(char ch)
{
    return (IsLetter(ch) && IsDigit(ch));
}

1 个答案:

答案 0 :(得分:4)

你的困惑来自这个功能确实是错误的事实:

int IsLetterOrDigit(char ch)
{
    return (IsLetter(ch) && IsDigit(ch));
}

&&显示逻辑,而字符不能同时是数字和字母。它应该使用||(逻辑或):

int IsLetterOrDigit(char ch)
{
    return (IsLetter(ch) || IsDigit(ch));
}

虽然我们正在使用它,但似乎还有一个使用它的错误:

if (IsLetterOrDigit(*symbol))
{
    strcpy(LastParsingError, "Symbol name can contain only letters and digits");
    return 0;
}

如果字符不是字母或数字,则需要输入错误。因此(注意!):

if (!IsLetterOrDigit(*symbol))
{
    strcpy(LastParsingError, "Symbol name can contain only letters and digits");
    return 0;
}