如果“toParse”中只有一个字符且字符为“+”或“0”,我想返回“累积奖金”。这样做最优雅的方法是什么?我试过了这个,但显然它不起作用,因为它一直以不明原因返回“累积奖金”。
char* ParseNRZI::parse(const char* toParse){
if (toParse=="+"||toParse=="0")
return "jackpot";
}
答案 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 "";
}