3

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

我要更改的代码将是这样的:

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

我想也许它会是类似的东西

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

...但这似乎不起作用。真的有办法吗?我想是这样的。

4

7 回答 7

2

你可以这样做:

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

您还可以检查字符串是否是 a 的成员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

任何变量一次只能与一个值进行比较,并且您不能“或”字符串...所以不,恐怕您不走运。

于 2013-02-21T13:51:44.393 回答
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 回答
1

你越接近正则表达式,但它们只能在 C++11 中使用(或通过像 PCRE 这样的外部库),并且与 OR'ed 比较相比,它们会产生很多开销,所以我怀疑你是否想那样做对于这么简单的事情。

于 2013-02-21T13:54:03.720 回答
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

可能的解决方案:

  • 使用正则表达式(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)
    {
    }
    
  • 或者你有什么问题。

于 2013-02-21T13:57:38.153 回答
0

很简单,不,没有。您将尝试在两个字符串上进行按位或操作,我认为这不是std::string.

你可以编写一个可变参数函数来为你做这件事,尽管它可能比正常做更多的工作。

于 2013-02-21T13:51:03.517 回答