Если я правильно понял ваш вопрос, вы можете передать параметр функции с позиции, с которой вы хотите начать поиск, и использовать его для установки итератора:
void print_str(const std::string& str, int pos)
{
std::regex r("\\{[^}]*\\}");
auto words_begin =
std::sregex_iterator(str.begin() + pos, str.end(), r);
//...
}
int main()
{
std::string str = "somestring";
func_str(str, 4);
}
Или передайте сами итераторы, один в позицию, с которой вы хотите начать поиск, и один в конец строки:
void func_str(std::string::iterator it_begin, std::string::iterator it_end)
{
std::regex r("\\{[^}]*\\}");
auto words_begin =
std::sregex_iterator(it_begin, it_end, r);
//...
}
int main()
{
std::string str = "somestring";
func_str(str.begin() + 4, str.end());
}
Как @ bruno правильно указано, вы можете использовать str.substr(4)
не str + 4
в качестве аргумента вместо исходной строки, обратная сторона метода заключается в том, что он создаст ненужные копии строки для поиска, поскольку @ Марек также правильно указал , поэтому варианты передачи позиции или итераторов начала и конца дешевле. Плюс в том, что вам не нужно ничего менять в функции.