const char *测试与角色的相等性

时间:2013-08-03 01:17:41

标签: c++

如果“toParse”中只有一个字符且字符为“+”或“0”,我想返回“累积奖金”。这样做最优雅的方法是什么?我试过了这个,但显然它不起作用,因为它一直以不明原因返回“累积奖金”。

char* ParseNRZI::parse(const char* toParse){
    if (toParse=="+"||toParse=="0")
        return "jackpot";
}

2 个答案:

答案 0 :(得分:3)

如果将C样式指针与char

进行比较,请使用strcmp
char* ParseNRZI::parse(const char* toParse)
{
    if (strcmp(toParse, "+") == 0 ||
        strcmp(toParse, "0") == 0)
    {
        return "jackpot";
    }
    return "something else";
}

或者,如果您使用std::string,则可以自由使用operator==

std::string ParseNRZI::parse(const std::string& toParse)
{
    if (toParse == "+" || 
        toParse == "0") 
    {
        return std::string("jackpot");
    }
    return std::string("something else");
}

从设计的角度来看,你正在使用检查功能而不是真正的解析功能。然后你可以将你的功能重写为:

bool isJackpot(const std::string& value) 
{
    if (toParse == "+" || 
        toParse == "0") 
    {
        return true;
    }
    return false;
}

它可以简化为:

bool isJackpot(const std::string& value) 
{
  return value.find_first_of("0+") != std::string::npos;
}

注意:当char*不是toParse+时,您的函数并不总是在所有分支中返回0,它将调用未定义的行为。当函数返回类型不是void时,请确保所有函数分支都返回一个值。

答案 1 :(得分:0)

    const char* ParseNRZI::parse(const char* toParse) const
    {
      if (( toParse != 0 ) &&
          ( toParse[0] == '+' || toParse[0] == '0' ) &&
          ( toParse[1] == 0 )
         )
        return "jackpot";

      return "";

    }