这是一件非常简单的事情,但我想知道是否有办法检查多字符文字是否等于两个(或更多)多字符文字之一。
我要更改的代码将是这样的:
if (value == 'test' || value == 'example')
我想也许它会是类似的东西
if (value == ('test' | 'example')
...但这似乎不起作用。真的有办法吗?我想是这样的。
这是一件非常简单的事情,但我想知道是否有办法检查多字符文字是否等于两个(或更多)多字符文字之一。
我要更改的代码将是这样的:
if (value == 'test' || value == 'example')
我想也许它会是类似的东西
if (value == ('test' | 'example')
...但这似乎不起作用。真的有办法吗?我想是这样的。
你可以这样做:
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;
}
任何变量一次只能与一个值进行比较,并且您不能“或”字符串...所以不,恐怕您不走运。
你可以用这个
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
}
你越接近正则表达式,但它们只能在 C++11 中使用(或通过像 PCRE 这样的外部库),并且与 OR'ed 比较相比,它们会产生很多开销,所以我怀疑你是否想那样做对于这么简单的事情。
你可以有一个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") {
//...
}
可能的解决方案:
使用正则表达式(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)
{
}
或者你有什么问题。
很简单,不,没有。您将尝试在两个字符串上进行按位或操作,我认为这不是std::string
.
你可以编写一个可变参数函数来为你做这件事,尽管它可能比正常做更多的工作。