确定多字符文字是否等于一个值或另一个值

时间:2013-02-21 13:50:19

标签: c++ if-statement

这是一件非常简单的事情,但我想知道是否有办法检查多字符文字是否等于两个(或更多)多字符文字中的一个。

我想要改变的代码是这样的:

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

我想也许这就像

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

......但这似乎不起作用。有没有办法做到这一点?我是这么想的。

7 个答案:

答案 0 :(得分:2)

你可以这样做:

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

您还可以检查字符串是否是std::set的成员。

e.g。

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


if( values.find( "blah blah" ) != values.end() )
{
    cout << "found!" << endl;
}

答案 1 :(得分:2)

任何变量一次只能与一个值进行比较,你不能'或'串......所以不,我怕你运气不好。

答案 2 :(得分: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
}

答案 3 :(得分:1)

你会越接近正则表达式,但它们只能在C ++ 11中使用(或通过像PCRE这样的外部库),与OR'ed比较相比,它们会产生大量开销,所以我怀疑你想要为那些简单的东西走那条路。

答案 4 :(得分: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") {
    //...
}

答案 5 :(得分:1)

可能的解决方案:

  • 使用正则表达式(boost::regexstd::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)
    {
    }
    
  • 或您在问题中的内容。

答案 6 :(得分:0)

简单地说,不,没有。您要尝试做的是对两个字符串进行按位OR,我认为它不是std::string的已定义运算符。

你可以写一个可变函数来为你做这个,虽然它可能比正常做更多的工作。