Я хочу добиться такого результата:
До:
有人 可能 会 问: «那 情绪, 欲望, 冲动, 强迫 症 有 什么 区别 呢»
После:
有人 可能 会 问 那 情绪 欲望 冲动 强迫 症 有 什么 区别 呢
Для пробела замените китайские знаки препинания.
Я пытался использовать 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';
Предполагая, что вы имели в виду использование регулярного выражения, а не символьной функции замены … Вот что я имел в виду, используя 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
}