C++ 使用STL string 实现的split,trim,replace-修订
2015-12-24 00:00
453 查看
使用python的时候默认str 对字符串操作支持非常丰富,相信每个C++程序员都自己写过string的strim、split、replace,
写个小工具函数,留着用,以前偷懒,写了好几次,这次总结一下,贴出来。
写个小工具函数,留着用,以前偷懒,写了好几次,这次总结一下,贴出来。
#include <iostream> #include <vector> using namespace std; namespace strtool { string trim(const string& str) { string::size_type pos = str.find_first_not_of(' '); if (pos == string::npos) { return str; } string::size_type pos2 = str.find_last_not_of(' '); if (pos2 != string::npos) { return str.substr(pos, pos2 - pos + 1); } return str.substr(pos); } int split(const string& str, vector<string>& ret_, string sep = ",") { if (str.empty()) { return 0; } string tmp; string::size_type pos_begin = str.find_first_not_of(sep); string::size_type comma_pos = 0; while (pos_begin != string::npos) { comma_pos = str.find(sep, pos_begin); if (comma_pos != string::npos) { tmp = str.substr(pos_begin, comma_pos - pos_begin); pos_begin = comma_pos + sep.length(); } else { tmp = str.substr(pos_begin); pos_begin = comma_pos; } if (!tmp.empty()) { ret_.push_back(tmp); tmp.clear(); } } return 0; } string replace(const string& str, const string& src, const string& dest) { string ret; string::size_type pos_begin = 0; string::size_type pos = str.find(src); while (pos != string::npos) { cout << "replacexxx:" << pos_begin << " " << pos << "\n"; ret.append(str.data() + pos_begin, pos - pos_begin); ret += dest; pos_begin = pos + 1; pos = str.find(src, pos_begin); } if (pos_begin < str.length()) { ret.append(str.begin() + pos_begin, str.end()); } return ret; } } int main(int argc, char* argv[]) { cout << strtool::trim(" nihao ") << "\n"; vector<string> vt; strtool::split(",o h,,,nice,,,,,,,", vt); for (size_t i = 0; i < vt.size(); ++i) { cout << "out:" << vt[i] << "\n"; } string ret = strtool::replace("xxAxxxAxxAxx", "A", "B"); cout << "replace:" << ret << "\n"; return 0; }
相关文章推荐
- 一步步将vim改造成C/C++开发环境(IDE)
- C++中struct和class的区别
- c语言实现多线程下的链表队列
- c++中STL之heap, priority_queue使用
- iOS OC语言(三) 继承
- TImageList 和 TlistView 组件(C++Builder)
- c++游戏项目心得
- C++ 基础
- scanf/cin输入若干整数以回车结束,并存储,用C/C++实现
- C++ 中类的访问级别控制(public,protected,private!~~~3p)
- c语言之基础-2
- 工厂模式(C++)
- C++枚举类型
- C++ 类
- C语言开发总结(二十四)
- 一起talk C栗子吧(第八十一回:C语言实例--进程停止)
- 读C++代码必备专业名词
- 理解C语言——从小菜到大神的晋级之路(4)——数据类型、运算符和表达式
- 07 eclipse C/ C++编译含有多个main函数的项目
- C语言开发总结(二十三)