我需要检查一个短字符串是否与子字符串列表匹配。目前,我这样做如下所示(ideone 上的工作代码)
bool ContainsMyWords(const std::wstring& input)
{
if (std::wstring::npos != input.find(L"white"))
return true;
if (std::wstring::npos != input.find(L"black"))
return true;
if (std::wstring::npos != input.find(L"green"))
return true;
// ...
return false;
}
int main() {
std::wstring input1 = L"any text goes here";
std::wstring input2 = L"any text goes here black";
std::cout << "input1 " << ContainsMyWords(input1) << std::endl;
std::cout << "input2 " << ContainsMyWords(input2) << std::endl;
return 0;
}
我有 10-20 个子字符串需要与输入进行匹配。我的目标是优化代码以提高 CPU 利用率并降低平均情况下的时间复杂度。我以 10 Hz 的速率接收输入字符串,突发频率为 10 kHz(这是我担心的)。
有agrep带有用 C 编写的源代码的库,我想知道 C++ 中是否有等效的标准。快速浏览一下,将其与我所拥有的集成起来可能有点困难(但可行)。
有没有更好的方法将输入字符串与 C++ 中的一组预定义子字符串进行匹配?
最好的办法是使用正则表达式搜索,如果您使用以下正则表达式:
"(white)|(black)|(green)"
这样,只需对字符串进行一次传递,如果找到匹配项,您将进入第 1 组"white"
子字符串(以及开始点和结束点),如果匹配,则位于组 2 中"black"
子字符串(以及开始点和结束点),如果匹配则位于组 3 中"green"
子串。当您从第 0 组获得匹配结束的位置时,您可以开始新的搜索以查找更多匹配项,并且所有内容都将一次性传递到字符串!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)