gpt4 book ai didi

c - 理解 C 中的字母或数字函数检查

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:31 25 4
gpt4 key购买 nike

这些函数检查什么?

据我了解,他们应该检查单词是否包含非字母数字字符。我不明白它是怎么做到的。

我的理解:

  • 第一个检查是长度 - 没问题。
  • 第二个检查是字符是否为字母:
  • 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));
}

最佳答案

你的困惑来自于这个函数确实是错误的:

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;
}

关于c - 理解 C 中的字母或数字函数检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15476197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com