「toParse」に1文字しかなく、その文字が「+」か「0」のどちらかだったら「大当たり」を返したいです。これを行う最もエレガントな方法は何ですか? これを試してみましたが、原因不明で常に「ジャックポット」を返すため、機能しないようです。
char* ParseNRZI::parse(const char* toParse){
if (toParse=="+"||toParse=="0")
return "jackpot";
}
「toParse」に1文字しかなく、その文字が「+」か「0」のどちらかだったら「大当たり」を返したいです。これを行う最もエレガントな方法は何ですか? これを試してみましたが、原因不明で常に「ジャックポット」を返すため、機能しないようです。
char* ParseNRZI::parse(const char* toParse){
if (toParse=="+"||toParse=="0")
return "jackpot";
}
strcmp
C スタイルのポインターを char と比較する場合に使用します
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 "";
}