首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用std::search在std::string中搜索子字符串

使用std::search在std::string中搜索子字符串
EN

Stack Overflow用户
提问于 2020-09-16 18:53:59
回答 2查看 133关注 0票数 2

我想用std::search在一个字符串中搜索一些子字符串。

我试过这个:

代码语言:javascript
运行
复制
std::string str = "the quick brown fox jumps over the lazy dog";
std::string substr[] = { "fox","dog","bear" };
auto it = std::search(str.begin(), str.end(), substr, substr + 3);
std::cout << "substring found at position :" << (it - str.begin()) << std::endl;

我有这些错误:

代码语言:javascript
运行
复制
operator_surrogate_func:no mathing overloaded function found
Failed to specialize function template 'unknown type std::equal_to<void>::operator()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-16 19:14:52

您有一个子字符串数组,因此需要分别比较每个子字符串,std::search一次只能查找一个子字符串。

代码语言:javascript
运行
复制
std::string str = "the quick brown fox jumps over the lazy dog";
std::string substr[] = { "fox","dog","bear" };

for(auto& sstr : substr){
    auto it = std::search(str.begin(), str.end(), sstr.begin(), sstr.end());
    std::cout << "substring found at position :" << (it - str.begin()) << std::endl;
}

请注意,如果没有找到子字符串,则返回.end()迭代器,该迭代器指向字符串末尾后面的一个。

票数 3
EN

Stack Overflow用户

发布于 2020-09-16 19:07:20

因为std::search的最后两个参数应该是要查找的字符序列的迭代器(更准确地说,迭代器和迭代器的引用类型必须是可比较的),如果是std::string数组,则是substr变量。因此,range [substr, substr+3)实际上并不表示"fox“、"dog”或"bear“,而是指向字符串"fox”的指针和一个超出数组末尾的指针。

尝试以下操作:

代码语言:javascript
运行
复制
    std::string str = "the quick brown fox jumps over the lazy dog";
    std::string substr[] = { "fox","dog","bear" };
    auto it = std::search(str.begin(), str.end(), substr[0].begin(), substr[0].end());
    std::cout << "substring found at position :" << (it - str.begin()) << std::endl;
    it = std::search(str.begin(), str.end(), substr[1].begin(), substr[1].end());
    std::cout << "substring found at position :" << (it - str.begin()) << std::endl;
    it = std::search(str.begin(), str.end(), substr[2].begin(), substr[2].end());
    std::cout << "substring found at position :" << (it - str.begin()) << std::endl;
    return 0;

首先,它将在字符串中搜索"fox",然后是"dog“,然后是"bear”。没有找到"bear“,生成的迭代器指向str.end()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63918492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档