我如何缩短检查子字符串存在的多个条件

How can I shorten multiple conditions of checking substring existence?

本文关键字:条件 存在 字符串 何缩短 检查      更新时间:2023-10-16

我有这个代码正在工作(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";
}