c++ 一次完整读文件 及 实现string 的split方法
来源:互联网 发布:网络技术培训 编辑:程序博客网 时间:2024/05/29 18:44
要把文件的字符串读出,并将它分块(split)。
首先文件一行一行读台麻烦,网上搜了下,发现宝贝,一次读取整个文件到内存中, http://www.360doc.com/content/13/1101/01/14458144_325725835.shtml
std::ifstream inf("hlh_lc_cluster.def",std::ios::in); if(!inf) { std::cout<<"cannot open file"<<std::endl; return -1; } std::string str_file=""; std::stringstream tmp; tmp<<inf.rdbuf(); str_file=tmp.str();
很多其他语言的libary都会有去除string类的首尾空格的库函数,但是标准C++的库却不提供这个功能。
同样,网上搜了一个代码,调试的时候发现分出来的结果一个想要的结果,接着一个空元素,…… 仔细查看了下代码,原来他将delim长度默认成了1,没考虑到分词符可能是多个字符。
//注意:当字符串为空时,也会返回一个空字符串void split(std::string& s, std::string& delim,std::vector< std::string >* ret){size_t last = 0;size_t index=s.find_first_of(delim,last);while (index!=std::string::npos){ret->push_back(s.substr(last,index-last));last=index+1;index=s.find_first_of(delim,last);}if (index-last>0){ret->push_back(s.substr(last,index-last));}}
修改代码:将last=index+1; 改成last=index+delim.length();
OK!
ps: 之前误以为find_first_of是找第一个匹配的位置,今天做另一个东西的时候突然发现程序有问题,追查之下才发现find_first_of不是之前理解的意思。
首先,STL string 中有find函数和find_first_of函数,find函数(str1.find(str2))才是找str1中有str2子串,如果有则返回第一个匹配子串的首字符的index,如果没有则返回string::npos; 而find_first_of 函数(str1.find_first_of(str2))是找str1中出现str2字符,如果有……
修改代码: 将find_first_of 换成find
参见 另一篇博文http://blog.csdn.net/jinjiaoooo/article/details/26626117
0 0
- c++ 一次完整读文件 及 实现string 的split方法
- java string.split()函数的c/c++两种实现——strtok_r及string.find()
- java实现String的split方法
- String 的split()方法
- String的split()方法
- String的split方法
- String的split方法
- Lua语言string对象的split方法实现
- 替代String.split("")的方法
- String 的split()方法
- C#的String.Split 方法
- C#的String.Split 方法
- C#的String.Split 方法
- C#的String.Split 方法
- C#的String.Split 方法
- C#的String.Split方法
- C#的String.Split 方法
- String类的split方法
- 位操作习题1
- 视频压缩编码和音频压缩编码的基本原理
- shell脚本显示字体颜色
- Tomcat__实现简单的登陆功能
- NAT专题
- c++ 一次完整读文件 及 实现string 的split方法
- 资源币提现方法与步骤说明
- s5pv210的汇编中断
- HDU 最小公倍数 1108 【水】
- Spring RESTful服务接收和返回JSON最佳实践
- struts-2.3.16.3+hibernate-4.2.14+spring-framework-4.0.6整合
- 管技理术
- 判断一个字符串是否为回文,以及求一个字符串中最长回文串
- 安卓颜色秀----颜色查询应用