最近一段时间过于堕落,沉迷小说游戏,无心学习。今天正好是人生新开始,把工作中用到的知识总结一下。由于本身学习了C++11,14,17,20.但公司的平台采用的技术是C++11。而且还不完整,这时候正是体现学习新特性的好处。同时正则表达式平常没怎么使用,顺便记录一下。
由于编译器版本的问题,博主采用的是vs2010版本,只支持部分的C++11功能。所以boost库在这一方面体现出了优势。
1.for循环的使用
本编译器版本的C++11不支持 for(const auto& var:vec)
可以采用BOOST_FOREACH(auto var,vec)
2.boost::assign循环的使用
本编译器版本的C++不支持 初始化列表构造
可以采用boost::assign
通过输入的字符串进行字符转换
就是输入带有特殊字符串的$h,然后将$h变成字符串匹配进行转换,但是正则表达式对特殊字符串需要转义,就是变成\\$h,正则表达式才能转换。
比如字符串为(A为原字符串,B为转换字符串,C为要转换的字符串)
A: hd$hua&hd$hd$xx
B: $h
C:test
最终效果:hdtestua&hdtestd$xx
代码如下:(其中正则表达式的特殊字符需要进行转义,$字符比较特别,需要进行单独处理,regex对特殊字符判断需要转义,不然会报错)
-
- string& replace_all_distinct(string& str, const string& oldStr, const string& newStr)
- {
- for (string::size_type pos(0); pos != string::npos; pos += newStr.length())
- {
- if ((pos = str.find(oldStr, pos)) != string::npos)
- {
- str.replace(pos, oldStr.length(), newStr);
- }
- else
- {
- break;
- }
- }
- return str;
- }
-
- //处理正则表达式中的特殊字符
- void DealwithRegexSpecialChar(string& str)
- {
- string A = "hd$hua&hd$hd$xx";
- string B = "$h";
- string C = "test";
- //优先处理转义字符'\',防止其他先转义后带\\,再进行转义出问题
- using namespace boost::assign;
- vector<string> vec;
- vec += "\\\\", "\\.", "\\^", "\\(", "\\)", "\\*",
- "\\+", "\\?", "\\{", "\\}", "\\[", "\\]", "\\|";
-
- BOOST_FOREACH(const auto & var, vec)
- {
- regex re(var);
- B = regex_replace(B, re, var);
- }
-
- string oldStr = "$";
- string newStr = "\\$";
- replace_all_distinct(B, oldStr, newStr);
- //将B作为正则表达式
- regex re(B);
- A = regex_replace(A, re, C);
- int a = 10;
-
- }
最终效果:
