如何在给定特定字符串组的情况下找到任何字符串的第一个匹配项?

时间:2014-07-01 07:52:50

标签: c++ string

例如,我有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.

1 个答案:

答案 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是一次通过搜索多个针头的好算法。但它肯定更复杂。