我有一个函数,我正在尝试检查字符串是否格式正确。我试图通过查看每个字符并确定它是否是正确的类型来做到这一点。然而,无论我尝试什么,我都会得到一个我无法弄清楚的错误。代码如下:
bool valid(string checkcode)
{
if(checkcode.length()!=6) return false;
else if(isalpha(checkcode.at(0)))&(isalpha(checkcode.at(1)))&(isdigit(checkcode.at(2)))&(isdigit(checkcode.at(3)))&(isalpha(checkcode.at(4)))&(isalpha(checkcode.at(5))) return true;
else return false;
}
我得到的错误是在第一个'&'并且它说“错误:表达式必须是Ivalue或函数指示符”我真的被困在这里,任何帮助都表示赞赏。
答案 0 :(得分:3)
isalpha(checkcode.at(0)))&(isalpha(checkcode.at(1)))
//bit and
应该是
isalpha(checkcode.at(0)))&&(isalpha(checkcode.at(1)))
//^^logical and
在这种情况下,您需要使用logical and
。
您还需要确保括号匹配。
//better to format multiple conditions and make sure () match
if(
(isalpha(checkcode.at(0)))
&&(isalpha(checkcode.at(1)))
&&(isdigit(checkcode.at(2)))
&&(isdigit(checkcode.at(3)))
&&(isalpha(checkcode.at(4)))
&&(isalpha(checkcode.at(5)))
)
return true;
答案 1 :(得分:3)
bool valid(string checkcode)
{
return checkcode.length() == 6
&& (isalpha(checkcode.at(0)))
&& (isalpha(checkcode.at(1)))
&& (isdigit(checkcode.at(2)))
&& (isdigit(checkcode.at(3)))
&& (isalpha(checkcode.at(4)))
&& (isalpha(checkcode.at(5)));
}
答案 2 :(得分:1)
您的错误原因是您的括号位于错误的位置。编译器抱怨的&
是 if
语句的条件表达式。
编译器将此视为要测试的条件:
if(isalpha(checkcode.at(0)))
其余部分被视为条件为真时要执行的语句:
&(isalpha(checkcode.at(1)))...
因此,编译器是正确的。当它看到一个一元 &
运算符时,它期望操作数可以取代它的地址,例如左值或函数。
仔细阅读错误消息和代码将帮助您下次发现此类错误。 (也就是说,当编译器抱怨缺少“左值或函数指示符”时,问问自己一开始会有什么期望这样的事情。它想要那些当它拿出某个东西的地址时,那么考虑一下为什么它认为它应获取任何地址。它使用一元&
运算符执行此操作,但您打算使用二元运算符,因此请仔细查看代码以确定它不被解释为一个二元运算符。你知道C ++语法,所以你知道if
语句需要完全括在括号中,所以你知道只有第一个表达式是条件的一部分。这是不是你想要的,所以你会发现右括号在错误的地方。)
实际上,单&符号&
运算符不是布尔表达式应该使用的运算符。您应该使用&&
代替。这种差异不会导致您看到的错误,也不会对您的代码的运行时行为产生明显的影响。