windows10安装体验(win8.1升级win10)
2014-10-17 14:17
441 查看
给出一篇文档,要求把里面的“性爱”都替换成“革命”,“性”都替换成“道德”。删除里面所有的“A片”。在所有的“苍井空来了”前面加上“(表相信)”,后面加上“(这是谣言)”。
要求:考虑周密,设想各种会出现的奇怪情况。因为---我们是国家安全局!宁可错杀一万,不能漏过一个。
首先考虑到肯定要涉及到各种宽字符的过滤故肯定要使用unicode来处理,我们的函数接口不妨设为
static void filter_unicode(std::wstring& ws_text);
然后题目中的三个需求其实都可以概括成将子串A替换为B的操作,故如果没有特殊要求直接三句boost::replace_all即可搞定。
现在来考虑最后的要求中提到的“奇怪情况”,那就需要我们“设身处地”地来思考啦。我们平时想输入敏感字时会用到什么方法呢,无外乎会插入空格或者各种异常标点符号之类,这里会想到用正则表达式岂不正好?符合我们需求的相应函数为std::regex_replace,boost的regex库也有对应函数,这里就用c++ 0x原生的了。
我们的需求是从关键字首字符开始匹配,中间如果只间隔标点符号,且符号结束后的第一个字符与关键字尾字符相匹配,则匹配成功,将此串替换为预设的目标串。要注意到的是c++ 0x和boost中的regex库并不支持unicode库定义,比如\p{L} 之类的定义,不然我们可以简单的使用\p{Punct}来完成这个需求了。详细的符号定义可以参考http://en.wikipedia.org/wiki/Regular_expression,我们这里使用到的是\W,可以排除所有字母(包含中文等)和下划线,于是正则表达式可以写成
性\W*爱
再将下划线补充上即可完成需求
性[\W|_]*爱
最终完成的代码如下:
运行结果如下:
本文出自 “誓將天下事了然於胸” 博客,请务必保留此出处http://magicyang.blog.51cto.com/2226589/1107911
要求:考虑周密,设想各种会出现的奇怪情况。因为---我们是国家安全局!宁可错杀一万,不能漏过一个。
首先考虑到肯定要涉及到各种宽字符的过滤故肯定要使用unicode来处理,我们的函数接口不妨设为
static void filter_unicode(std::wstring& ws_text);
然后题目中的三个需求其实都可以概括成将子串A替换为B的操作,故如果没有特殊要求直接三句boost::replace_all即可搞定。
现在来考虑最后的要求中提到的“奇怪情况”,那就需要我们“设身处地”地来思考啦。我们平时想输入敏感字时会用到什么方法呢,无外乎会插入空格或者各种异常标点符号之类,这里会想到用正则表达式岂不正好?符合我们需求的相应函数为std::regex_replace,boost的regex库也有对应函数,这里就用c++ 0x原生的了。
我们的需求是从关键字首字符开始匹配,中间如果只间隔标点符号,且符号结束后的第一个字符与关键字尾字符相匹配,则匹配成功,将此串替换为预设的目标串。要注意到的是c++ 0x和boost中的regex库并不支持unicode库定义,比如\p{L} 之类的定义,不然我们可以简单的使用\p{Punct}来完成这个需求了。详细的符号定义可以参考http://en.wikipedia.org/wiki/Regular_expression,我们这里使用到的是\W,可以排除所有字母(包含中文等)和下划线,于是正则表达式可以写成
性\W*爱
再将下划线补充上即可完成需求
性[\W|_]*爱
最终完成的代码如下:
#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; }
运行结果如下:
本文出自 “誓將天下事了然於胸” 博客,请务必保留此出处http://magicyang.blog.51cto.com/2226589/1107911
相关文章推荐
- 如何升级到Windows10系统?升级win10系统遇到的问题解决汇总(含视频体验)
- win8.1怎么升级win10 win8.1升级安装win10图文步骤
- Windows10升级安装错误代码0xC1900101-全集(win10普及,觉得这篇文章还挺好)
- Win10 Build 9926怎么升级?Windows10 9926纯净8分钟安装教程
- 获取Windows10工具升级Win10安装失败的解决方法
- Windows 10体验:第一时间下载了Windows10开始安装
- win10系统操作小技巧 1分钟体验windows10新鲜感
- 港版Surface Pro升级win8.1和安装中文简体的各种问题集锦
- 升级Win8.1操作系统后出现“你的windows 8.1安装无法完成”的现象解决方法介绍
- Win8.1系统升级到Win10(32位和64位)的具体步骤
- 如何从硬盘安装win10系统?Windows10硬盘安装方法/步骤详解
- 安装Win8.1提示 与电脑制造商联系,升级系统BIOS
- Win 7/8.x用户可通过升级安装Win10
- Win8.1升级Win10 9879失败,出现错误代码怎么办?
- Win10 最新技术预览版Build 9879 安装体验
- 硬件升级win8.1重新安装系统
- Win8.1安装与初次体验(图赏)
- Win10怎么安装输入法?windows10系统安装搜狗输入法教程
- 想要体验win10 vmware fusion7虚拟机安装win10教程