我有一个由两个迭代器(start
和end
)定义的子字符串。我需要检查这个子字符串是否存在于另一个字符串中。
是否有标准库算法或字符串成员我可以使用或适应这样做而不创建一个全新的字符串对象(std::string(start, end)
)仅用于此目的?
e.g。
struct Substring
{
std::string::const_iterator start, end;
};
auto found = std::contains(whole.begin(), whole.end(), substring.start, substring.end); // ???
答案 0 :(得分:10)
bool found =
std::search(hay.begin(), hay.end(), needle.begin(), needle.end()) != hay.end();
答案 1 :(得分:0)
您可以使用std::string::find
方法:
auto found = (whole.find(&*substring.start, 0, substring.end - substring.start)
!= std::string::npos);
优于std::search
的优点是std::find
适用于字符串,可以使用Boyer-Moore实现。可悲的是,这不是gcc的libstdc ++如何实现它。