我有这个正常工作的代码(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";
}
有人可以给我一些建议如何缩短上面的代码(我已经尝试过循环,但结果是一团糟而且没有运行)。因为我是C ++的新手,所以请耐心等待。
答案 0 :(得分:0)
您可以尝试以下方式:
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;
}
答案 1 :(得分:0)
string name(s.name);
name.push_back('\0');
name+=s.surname;
name.push_back('\0');
name+=s.username;
transform(name.begin(), name.end(), name.begin(), ::tolower);
string::size_type pos = name.find(keyword);
if(pos != string::npos ) {
cout << "Found";
}