我想达到这样的结果:
在:
有人可能会问:“那情绪,欲望,冲动,强迫症有什么区别呢”
后:
有人可能会问那情绪欲望冲动强迫症有什么区别呢
用空格替换中文标点符号。
我尝试使用replace
和replace_if
功能但失败了。像这样的代码:
char myints[] = "有人可能会问:“那情绪、欲望、冲动、强迫症有什么区别呢?”";
std::vector<char> myvector ;
std::replace_if (myvector.begin(), myvector.end(), "\\pP", " ");
std::cout << "myvector contains:";
for (std::vector<char>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
答案 0 :(得分:1)
假设你的意思是使用正则表达式,而不是逐字符替换函数......这就是我使用std::regex_replace
的意思。可能有一个更优雅的正则表达式,可以用更少的惊喜来概括,但至少这适用于你的例子。
#include <regex>
#include <string>
int main()
{
std::wstring s(L"有人可能会问:“那情绪、欲望、冲动、强迫症有什么区别呢?”");
// Replace each run of punctuation with a space; use ECMAScript grammar
s = std::regex_replace(s, std::wregex(L"[[:punct:]]+"), L" ");
// Remove extra space at ends of line
s = std::regex_replace(s, std::wregex(L"^ | $"), L"");
return (s != L"有人可能会问 那情绪 欲望 冲动 强迫症有什么区别呢"); // returns 0
}