将wstring内联与较小的差异进行比较

时间:2014-08-22 22:57:01

标签: c++

我有一个wstring(或者wchar_t,哪个更合适),我想用单IF语句(如果可能的话)将它与6个可能的字符串(其中一半是动态的,不是常量)进行比较。我想知道什么是最好的方法,而不是几行和大量的构建字符串和变量。我想知道专业/最短/最快/最好的方式。

简而言之,我想这样做: 如果MyStr等于:

MyCurrentFolder() + "test" OR
MyCurrentFolder() + "test," OR
MyCurrentFolder() + "test, " OR
"test" OR
"test, " OR
"test,"

做点什么......

请建议。

3 个答案:

答案 0 :(得分:1)

它认为这样的事情会起作用:

bool any_of(std::string const& name, std::initializer_list<std::string> const& list) {
    return list.end() != std::find(list.begin(), list.end(), name);
}
// ...

if (any_of(MyStr, { MyCurrentFolder() + "test",
                    MyCurrentFolder() + "test,",
                    MyCurrentFolder() + "test, ",
                    std::string("test"),
                    std::string("test,"),
                    std::string("test, ") })) {
    ...
}

答案 1 :(得分:0)

您可以使用std::set执行此操作,假设MyCurrentFolder返回std::string。 E.g:

auto tests = std::set<std::string>{
    MyCurrentFolder() + "test",
    MyCurrentFolder() + "test,",
    MyCurrentFolder() + "test, ",
    "test",
    "test, ",
    "test,"};
if (tests.find(MyStr) != tests.end()) {
    // matches
}

答案 2 :(得分:0)

以下内容符合在if条件下拟合所有内容的要求:

if ([&](wstring s) {vector<wstring>e{ MyCurrentFolder() + L"test", MyCurrentFolder()
       + L"test,", MyCurrentFolder() + L"test, ", L"test", L"test, ",
       L"test," }; return find(e.begin(), e.end(), s) != e.end(); }(MyStr)) {
    ...//YES the string is there;
}