給出一篇文檔,要求把裏面的「性愛」都替換成「革命」,「性」都替換成「道德」。刪除裏面全部的「A片」。在全部的「蒼井空來了」前面加上「(表相信)」,後面加上「(這是謠言)」。
要求:考慮周密,設想各類會出現的奇怪狀況。由於---咱們是國家安全局!寧肯錯殺一萬,不能漏過一個。
ios
最終完成的代碼以下:
c++
#include <regex> #include <locale> #include <string> #include <iostream> static wchar_t* rules[][2] = { {L"性(\\W|_)*愛", L"革命"}, {L"性", L"道德"}, {L"A(\\W|_)*片", L""}, {L"蒼(\\W|_)*井(\\W|_)*空(\\W|_)*來(\\W|_)*了", L"(表相信)蒼井空來了(這是謠言)"}, }; static const int RULE_COUNT = sizeof(rules) / sizeof(rules[0]); static void filter_unicode(std::wstring& ws_text) { for (int i = 0; i < RULE_COUNT; ++i) ws_text = std::regex_replace(ws_text, std::wregex(rules[i][0]), std::wstring(rules[i][1])); } static void test1() { std::locale::global(std::locale("chs")); std::wstring ws_text = L"性不愛性a愛性 \t\r\n`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?·!@#¥%……()——【】{}、,。《》?愛性6A片333蒼井空來了555"; std::wcout << "before:" << ws_text << std::endl; filter_unicode(ws_text); std::wcout << std::endl << L"---------------------------" << std::endl; std::wcout << "after:" << ws_text << std::endl; }