这是一件非常简单的事情,但我想知道是否有办法检查多字符文字是否等于两个(或更多)多字符文字中的一个。
我想要改变的代码是这样的:
if (value == 'test' || value == 'example')
我想也许这就像
那样if (value == ('test' | 'example')
......但这似乎不起作用。有没有办法做到这一点?我是这么想的。
答案 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::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)
{
}
或您在问题中的内容。
答案 6 :(得分:0)
简单地说,不,没有。您要尝试做的是对两个字符串进行按位OR,我认为它不是std::string
的已定义运算符。
你可以写一个可变函数来为你做这个,虽然它可能比正常做更多的工作。