1

たとえば、私の状況:
「0」、「1」、「true」、または「false」の入力を受け取っています。(いずれの場合も)
パフォーマンス、コードの読み取り、基本的なベストプラクティスの観点から好ましいもの:

bool func(string param)
{
    string lowerCase = param;
    to_lower(lowerCase);
    if (lowerCase == "0" || lowerCase == "false")
    {
        return false;
    }
    if (lowerCase == "1" || lowerCase == "true")
    {
        return true;
    }
    throw ....
}

また:

bool func(string param)
{
    string lowerCase = param;
    to_lower(lowerCase);
    regex rxTrue  ("1|true");
    regex rxFalse ("0|false");

    if (regex_match(lowerCase, rxTrue)
    {
        return true;
    }
    if (regex_match(lowerCase, rxFalse)
    {
        return false;
    }
    throw ....
}
4

2 に答える 2

3

2つ目はやや明確で、拡張が簡単です(たとえば、 "yes"and "no"、またはprefixes、with "1|t(?:rue)?)"and を受け入れ"0|f(?:alse)?"ます。パフォーマンスに関しては、2つ目は、regex static (およびconst、 )、例:

static regex const rxTrue ( "1|true" , regex_constants::icase );
static regex const rxFalse( "0|false", regex_constants::icase );

大文字と小文字を区別しないように指定することで、入力を小文字に変換する必要がないことにも注意してください。

于 2012-04-16T07:53:30.510 に答える
1

これは単なる予感ですが、おそらく最初の方が高速になります(正規表現のコンパイルは含まれません)。また、2番目のバージョンはC ++ 11<regex>実装をサポートするコンパイラに依存するため、サポートする必要のある環境に応じて、2番目のオプションは自動的に除外されます。

于 2012-04-16T07:29:04.017 に答える