我想使用函数搜索或其他类似函数来查找给定模式的多次出现。
这是我的代码:
#include <cstring>
#include <iostream>
#include <iomanip>
#include <set>
#include <list>
#include <vector>
#include <map>
#include <algorithm>
#include <functional>
using namespace std;
int main () {
std::vector<int> haystack;
string a = "abcabcabc";
string b = "abc";
string::iterator it;
it = search(a.begin(),a.end(),b.begin(),b.end());
if(it!=a.end()){
cout << it-a.begin()<<endl;
}
return 0;
}
此代码返回0作为第一次出现的模式“abc”,想要返回0,3,6。这将是原始字符串中模式开始的所有索引。
感谢您的帮助。
答案 0 :(得分:3)
for(size_t pos=a.find(b,0); pos!=std::string::npos; pos=a.find(b,pos+1)) {
std::cout << pos << std::endl;
}
这直接使用std::basic_string::find
(ref)来查找子字符串的起始位置。
答案 1 :(得分:1)
search
函数在第一个字符串a
中搜索第二个字符串b
的元素是否出现。由于您的第二个字符串包含元素a
,b
和c
,代码会将迭代器返回到第一个位置,然后返回第二个,第三个,...
您使用的是find
功能。它返回一个迭代器,该迭代器等于你正在搜索的元素。在您的情况下,您在字符串a
中搜索元素abc
。所以你必须打电话
string::iterator it = std::find(a.begin(), a.end(), "abc");
while (it != a.end()) {
// Do whatever you want to do...
++it;
it = std::find(it, a.end(), "abc");
}
答案 2 :(得分:0)
ProjectSingle