1

「toParse」に1文字しかなく、その文字が「+」か「0」のどちらかだったら「大当たり」を返したいです。これを行う最もエレガントな方法は何ですか? これを試してみましたが、原因不明で常に「ジャックポット」を返すため、機能しないようです。

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

2 に答える 2

4

strcmpC スタイルのポインターを 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

于 2013-08-03T01:19:52.667 に答える
0
    const char* ParseNRZI::parse(const char* toParse) const
    {
      if (( toParse != 0 ) &&
          ( toParse[0] == '+' || toParse[0] == '0' ) &&
          ( toParse[1] == 0 )
         )
        return "jackpot";

      return "";

    }
于 2013-08-03T01:29:37.893 に答える