我写了下面的函数:
std::regex r("");
for (std::sregex_iterator i = words_begin; i != words_end; ++i) {}
它从给定字符串 (str
) 的开头开始寻找正则表达式匹配项,但是我该如何告诉它排除特定索引之前的所有内容?
例如,我希望它删除索引号 4 之后的所有内容(不包括它)。
注意:我从另一个函数调用这段代码,所以我在字符串参数中尝试了类似 str + 4
的东西,但我得到一个错误,它不是左值。
最佳答案
如果我正确理解你的问题,你可以将一个参数传递给函数,其中包含你想要开始搜索的位置,并使用它来设置迭代器:
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 correctly stated ,您可以使用 str.substr(4)
而不是 str + 4
作为参数而不是原始字符串,该方法的缺点是它会创建不必要的拷贝要搜索的字符串的编号,如 @Marek also correctly pointed out ,因此传递位置或开始和结束迭代器的选项更便宜。好处是您不必更改函数中的任何内容。
关于c++ - 在 std::string 的特定索引处开始循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63281255/