C++ 分割字符串的问题不少啊
来源:互联网 发布:王尼玛有没有开淘宝店 编辑:程序博客网 时间:2024/06/05 05:11
以前还真没在C++下遇到过需要分割字符串的需求,想随手从网上的拷个split函数算了,结果找了几个都不满意,而且有些还是错的。
如果不是特殊原因用不了boost库的话,我也不会这么干,结果百度一下算是开了眼了:
比如有些在函数内开了个char[]当buffer,用来把所有字符装进去,以便按字符查找——但是无论多长的字符串进来都要增加一倍的空间开销,这样真的好吗。
还有默认分隔符是一个字符的——形参给的是string,你能保证调用者只传一个字符的string吗。
还有使用str.find_first_of()函数的,这个函数只要有一个字符匹配就会给返回,当分割符的长度超过1的时候就乱了套了,我直接拷过来随便测了下程序崩溃了。
还有一个把传进来的原始字符串给改了的,调用者为了分割一个字符串结果函数出来后把原始的串都给丢了。
还有一个函数写的太长我没功夫看的。还有一个在函数内new出子串空间给调用者传指针的,可能觉得调用者必须知道函数的内部实现,并且有义务在用完后把这些指针都给释放掉。
还有用new_string=origin_string.substr()不停的把处理过的串去掉,再接着分析余下的串的,但是这样来回拷串不嫌浪费时间空间吗。
还有直接在原串上给指针,指向各节点给调用者的,调用者要是赋个值啥的就直接进来的原串给改啦。
不一而足。没想到一个split()方法居然暴露出这么多问题。所以写代码跟写能用的代码不是一回事。跟写好用的代码也不是一回事。
为什么吐槽这么多,是因为觉得这东西网上绝逼有现成好用的,结果看了7,8个函数最终还是得自己写。。
Java, Python都可以String.split(),所以一切安好,C++果然还是手动档,自己造了个轮子:
list<string> split(const string& str, const string& separator) { list <string> result; if (str.length() == 0) { result.push_back(""); return result; } int pos = 0; int offset = 0 ; while ((pos = str.find(separator, offset)) != string::npos) { string subs; if (pos > 0) { subs = str.substr(offset, pos-offset); result.push_back(subs); } else if( pos==0) { result.push_back(""); } offset = pos + separator.size(); } if (offset < str.size()) { result.push_back(str.substr(offset, str.size())); } return result;}
总结:能用boost库的用boost库,真不能用也别随便从网上拷代码,质量没保证啊。比如上面这块代码。
- C++ 分割字符串的问题不少啊
- 字符串分割的问题
- c语言的字符串分割
- C语言的字符串分割
- C语言字符串的分割
- C语言字符串的分割
- 关于字符串分割的问题
- 不少程序员遇到的问题
- 字符串分割(C/C++)
- 标准C中字符串分割的方法
- C/C++ 分割字符串的多种方式
- c语言 字符串的拼接和分割
- C语言的字符串分割函数
- c语言实现字符串的分割
- 有关字符串分割的问题(正则表达式)
- split分割字符串遇到的问题
- java 竖线分割字符串的问题
- java 竖线分割字符串的问题
- Alphago原理浅析
- strcat,strncat函数
- Spring Cloud探路(三)REST 客户端Feign
- CSDN博客积分规则
- python基础教程---更加抽象,类,继承多态封装
- C++ 分割字符串的问题不少啊
- C语言小函数——删除字符串str1中含有的字符串str2
- 构造一个函数能将border-bottom-color用函数转成驼峰命名法,就是变成:borderBottomColor输出
- ntpdate[6043]: Can't find host –d: Name or service not known (-2)
- pip安装tensorflow出错怎么办
- ThreadLocal模式
- win10使用keytool将localhostapp.pem证书导入到cacerts中
- 将border-bottom-color用函数转成驼峰命名法
- 织梦dedecms调用随机文章并定时自动更新转子