3

これは非常に単純なことですが、複数文字リテラルが 2 つ (またはそれ以上) の複数文字リテラルのいずれかと等しいかどうかを確認する方法があるかどうか疑問に思っています。

変更したいコードは次のようになります。

if (value == 'test' || value == 'example')

おそらくそれは次のようなものになると思いました

if (value == ('test' | 'example')

...しかし、これはうまくいかないようです。実際にそれを行う方法はありますか?そう想像します。

4

7 に答える 7

2

これを使用できます

std::vector<string> v;
v.push_back("Test");
v.push_back("Example");

if (std::find(v.begin(), v.end(), stringToMatch) != v.end())
{
  //It was similar to one of the strings
}
于 2013-02-21T13:55:35.653 に答える
2

あなたはこれを行うことができます:

std::string const s = "blah blah";
if( s == "test" || s == "example" )
{
    // ...
}

文字列が のメンバーであるかどうかを確認することもできますstd::set

例えば

static char const* const data[] = {"test", "example"};
set<string> const values( data, data + 2 );


if( values.find( "blah blah" ) != values.end() )
{
    cout << "found!" << endl;
}
于 2013-02-21T13:51:28.853 に答える
2

どの変数も、一度に 1 つの値としか比較できず、文字列を「OR」することはできません。

于 2013-02-21T13:51:44.393 に答える
1

あなたsetは文字列を持っていて、存在をチェックすることができます。他の人が指摘しているようunordered_setに、ルックアップにはより効率的です。

unordered_set<string> validStrings = {"test",
                                      "example"};

if(validStrings.count("example") > 0) {
    //...
} else {
    //...
}

編集

これをクラスでまとめます。

template<typename Type>
class Container {
    unordered_set<Type> values;
public:
    //...
    bool contains(const Type& value) const {
        return values.count(values) > 0;
    }
};

そして、次のように使用します。

Container<string> validStrings = {"test",
                                  "example"};

if(validStrings.contains("example") {
    //...
}
于 2013-02-21T13:57:27.580 に答える
1

近づくほど正規表現になりますが、それらは C++11 (または PCRE などの外部ライブラリを介して) でのみ利用可能であり、OR 比較と比較して多くのオーバーヘッドが発生するため、そのようにしたいとは思えません。シンプルなもののために。

于 2013-02-21T13:54:03.720 に答える
1

可能な解決策:

  • 正規表現 (boost::regexまたはstd::regex)を使用します。

    const boost::regex r("test|example");
    if (boost::regex_match(s, r))
    {
    }
    
  • コンテナーに文字列を入力し、コンテナーを検索します。

    std::set<std::string> strings { "example", "test" };
    if (strings.count(s) > 0)
    {
    }
    
  • またはあなたが質問に持っているもの。

于 2013-02-21T13:57:38.153 に答える
0

単純に、いいえ、ありません。そこでやろうとしているのは、2 つの文字列に対するビットごとの OR ですstd::string

これを行うために可変引数関数を作成することもできますが、おそらく通常の方法よりも多くの作業が必要です。

于 2013-02-21T13:51:03.517 に答える