我如何缩短检查子字符串存在的多个条件
How can I shorten multiple conditions of checking substring existence?
我有这个代码正在工作(s
这里是一个结构变量):
// Convert char array to string
string name(s.name);
string surname(s.surname);
string username(s.username);
// Convert string to lower case
transform(name.begin(), name.end(), name.begin(), ::tolower);
transform(surname.begin(), surname.end(), surname.begin(), ::tolower);
transform(username.begin(), username.end(), username.begin(), ::tolower);
// Check if keyword is a substring inside above string
string::size_type pos = name.find(keyword);
string::size_type pos2 = surname.find(keyword);
string::size_type pos3 = username.find(keyword);
if(pos != string::npos || pos2 != string::npos || pos3 != string::npos) {
cout << "Found";
}
有人能给我一些建议如何缩短上面的代码(我已经尝试过循环,但结果是一团糟,不运行)。
您可以尝试这样做:
bool contains(const S& s, const std::string& keyword)
{
// Convert char array to string
std::string names[3] = {s.name, s.surname, s.username};
for (auto& name : names) {
// Convert string to lower case
transform(name.begin(), name.end(), name.begin(), ::tolower);
// Check if keyword is a substring inside above string
string::size_type pos = name.find(keyword);
if(pos != string::npos) {
std::cout << "Found";
return true;
}
}
return false;
}
string name(s.name);
name.push_back(' ');
name+=s.surname;
name.push_back(' ');
name+=s.username;
transform(name.begin(), name.end(), name.begin(), ::tolower);
string::size_type pos = name.find(keyword);
if(pos != string::npos ) {
cout << "Found";
}
相关文章:
- 模板元图.班级成员的条件存在
- 如果检查和内联条件之间是否存在编译器差异
- __has_include() 和后续 #include 之间是否存在争用条件
- 对条件表达式结果的赋值(其中第二个和第三个操作数是相同类型和值类别的变量)是否仍然存在?
- 根据成员变量的类型是否存在,有条件地定义该变量
- 放置多个条件时,循环是否存在限制
- 标准::condition_variable 中可能存在的争用条件
- 具有 3 个条件的 if 语句(三角形存在)
- 如果存在条件,是否有更简单的表示形式
- 检查前提条件是否存在原子增量,即原子值小于指定值
- 当只有一个线程写入 c++ 中的布尔变量时,是否存在争用条件
- 如何在Visual C++中有条件地包含一个不存在的文件
- C++ - 测试是否存在 DLL 以有条件地运行某些函数
- 在C++中,是否存在在特定条件下定义/运行宏的问题
- 循环中存在多个条件
- 存在多个条件时"IF"语句中的执行顺序
- if/else语句中存在多个条件
- 有条件地初始化一个结构体字段——仅当它存在于该结构体中时
- 如何声明在条件块之间持久存在的引用变量
- 在or条件语句中是否存在强制对两个表达式求值的模式或技巧?