constchar*用一个字符测试相等性

const char * testing equality with a character

本文关键字:测试 字符 一个 constchar      更新时间:2023-10-16

如果"toParse"中只有一个字符,并且字符是"+"或"0",我想返回"头奖"。做这件事最优雅的方法是什么?我试过了,但显然它不起作用,因为它总是因为未知的原因返回"头奖"。

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

如果将C风格指针与字符进行比较,请使用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时,请确保所有函数分支都返回一个值。

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