检查字符串中每个字符的类型

时间:2013-04-18 17:08:21

标签: c++ string

我有一个函数,我正在尝试检查字符串是否格式正确。我试图通过查看每个字符并确定它是否是正确的类型来做到这一点。然而,无论我尝试什么,我都会得到一个我无法弄清楚的错误。代码如下:

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或函数指示符”我真的被困在这里,任何帮助都表示赞赏。

3 个答案:

答案 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语句需要完全括在括号中,所以你知道只有第一个表达式是条件的一部分。这是不是你想要的,所以你会发现右括号在错误的地方。)

实际上,单&符号&运算符不是布尔表达式应该使用的运算符。您应该使用&&代替。这种差异不会导致您看到的错误,也不会对您的代码的运行时行为产生明显的影响。