我无法找到工作代码,只能将这个代码段硬币化,它会编译但输出错误。
#include <string>
#include <iostream>
#include <boost/regex.hpp>
int main() {
using namespace std;
string input = "123 apples 456 oranges 789 bananas oranges bananas";
boost::regex re = boost::regex("[a-z]+");
boost::match_results<string::const_iterator> what;
boost::match_flag_type flags = boost::match_default;
string::const_iterator s = input.begin();
string::const_iterator e = input.end();
while (boost::regex_search(s,e,what,re,flags)){
cout << what.position() << ", ";
string::difference_type l = what.length();
string::difference_type p = what.position();
s += p + l;
}
}
输出为:4, 5, 5, 1, 1,
但应该是:4, 15, 27, 35, 43,
答案 0 :(得分:2)
你几乎是对的,但没有考虑到cout << what.position() << ", ";
将相对于最后一个匹配字符串的末尾输出匹配字符串的位置这一事实,即{{1} }。
由于s
确切地知道它与s
的确切位置,所以这应该有效:
input