在C ++中使用regex_iterator的确切方法是什么?

时间:2015-05-26 13:39:12

标签: c++ regex

我一直在寻找一种计算字符串中特定类型子字符串数量的好方法,比方说,我想计算字符串'smstyuismsms'中'sms'的出现次数。我在论坛中找到了答案,有人建议使用regex_iterator。但是,当我按照以下方式尝试时:

strcpy()

它抛出一个错误说

  

错误:在'('token

>之前缺少模板参数

那么,如果不是这样,那么使用正则表达式模板的正确方法是什么?请提供一些例子。

1 个答案:

答案 0 :(得分:2)

通过查看documentation,似乎std :: regex_iterator是存在四个实例的模板:

cregex_iterator    regex_iterator<const char*>
wcregex_iterator   regex_iterator<const wchar_t*>
sregex_iterator    regex_iterator<std::string::const_iterator>
wsregex_iterator   regex_iterator<std::wstring::const_iterator>

你应该使用这些。我的意思是,你总是可以自己传递模板参数,但这不必要地冗长。

来自cppreference示例:

auto words_begin = std::sregex_iterator(s.begin(), s.end(), words_regex);

这与std::string / std::wstring非常相似,它们都是std::basic_string模板的实例化。基本上你的代码相当于使用basic_string而不是传递模板参数而不是直接使用string / wstring。