例如,我有3个字符串,我有兴趣在一个更大的字符串中查找。我如何使用std算法来查找这些字符串中任何一个的第一次出现?
std::string str = ...//Some large string to search in.
std::array<std::string, 3> tokens{ "abc", "qwe", "zxc" };
...//Find the the next occurrence of either "abc", "qwe", "zxc" in str, whichever comes first.
...// Process based on the result.
答案 0 :(得分:0)
如果您被限制在标准图书馆,或希望做一些简单的事情,那么最简单的选择就是一次搜索一个,并保持最好的#34;位置:
size_t bestIndex = 0;
size_t bestPosition = str.size();
for (size_t i = 0, max = tokens.size(); i < max; ++i) {
size_t const pos = str.find(tokens[i]);
if (pos >= bestPosition) { continue; }
bestPosition = pos;
bestIndex = i
}
如果您有更多资源或希望获得更高的性能,那么Aho-Corasick是一次通过搜索多个针头的好算法。但它肯定更复杂。