这些功能检查了什么?
根据我的理解,他们应该检查一个单词是否包含非字母数字字符。 我不明白它是如何做到的。
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));
}
答案 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;
}