0

我正在使用 boost xpressive regex_replace 。替换后,我在字符串末尾得到垃圾字符

std::wstring wEsc(L"fxSSyrpng");
std::wstring wReplaceByText(L"tiff");
std::wstring searchText(L"fx");

wsregex regExp;
try
{
    regExp = wsregex::compile( searchText );
}
catch ( regex_error &/*error*/ )
{
    throw ;
}
catch (...)
{
    throw ;
}
std::wstring strOut;
strOut.reserve( wEsc.length() + wReplaceByText.length() );
std::wstring::iterator it = strOut.begin();
boost::xpressive::regex_replace( it, wEsc.begin() , wEsc.end(), regExp, 
wReplaceByText,   regex_constants::match_not_null  );
4

1 回答 1

0

reserve字符串后strOut仍有 0 个元素。确实如此strOut.begin() == strOut.end(),并且it没有任何意义。如果要使用输出迭代器向 中写入数据regex_replaceit必须指向有足够空间存储所有数据的内存。您可以通过调用resize而不是reserve.

另一种解决方案是使用back_inserter来完成这项工作(operator=在这个迭代器上将数据推入string),然后it是不必要的,代码如下所示:

std::wstring strOut;
boost::xpressive::regex_replace( std::back_inserter(strOut), wEsc.begin() , wEsc.end(), regExp, 
wReplaceByText,   boost::xpressive::regex_constants::match_not_null  );
于 2019-04-11T09:01:57.807 回答