我有一个wstring(或者wchar_t,哪个更合适),我想用单IF
语句(如果可能的话)将它与6个可能的字符串(其中一半是动态的,不是常量)进行比较。我想知道什么是最好的方法,而不是几行和大量的构建字符串和变量。我想知道专业/最短/最快/最好的方式。
简而言之,我想这样做:
如果MyStr
等于:
MyCurrentFolder() + "test" OR
MyCurrentFolder() + "test," OR
MyCurrentFolder() + "test, " OR
"test" OR
"test, " OR
"test,"
做点什么......
请建议。
答案 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;
}