C++ 使用STL string 实现的split,trim,replace-修订

简介: 编辑器加载中... 使用python的时候默认str 对字符串操作支持非常丰富,相信每个C++程序员都自己写过string的strim、split、replace, 写个小工具函数,留着用,以前偷懒,写了好几次,这次总结一下,贴出来。

编辑器加载中...

使用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;
}
目录
相关文章
|
15天前
|
存储 算法 编译器
[C++] STL简介
[C++] STL简介
11 1
|
21天前
|
存储 算法 C++
C++ STL应用宝典:高效处理数据的艺术与实战技巧大揭秘!
【8月更文挑战第22天】C++ STL(标准模板库)是一组高效的数据结构与算法集合,极大提升编程效率与代码可读性。它包括容器、迭代器、算法等组件。例如,统计文本中单词频率可用`std::map`和`std::ifstream`实现;对数据排序及找极值则可通过`std::vector`结合`std::sort`、`std::min/max_element`完成;而快速查找字符串则适合使用`std::set`配合其内置的`find`方法。这些示例展示了STL的强大功能,有助于编写简洁高效的代码。
31 2
|
28天前
|
安全 编译器 容器
C++STL容器和智能指针
C++STL容器和智能指针
|
29天前
|
存储 算法 程序员
【STL】string
【STL】string
|
30天前
|
算法 安全 Linux
|
2月前
|
设计模式 算法 Java
【c++】STL之stack和queue详解
【c++】STL之stack和queue详解
32 1
|
2月前
|
存储 算法 C++
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
45 0
|
3月前
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`&quot;123abc&quot;`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
|
27天前
|
前端开发 Java
成功解决:java.lang.String cannot be cast to java.lang.Integer
这篇文章记录了作者在使用Axios二次封装时遇到的一个Java类型转换问题,即前端传递的字符串参数不能直接转换为Integer类型,文章提供了正确的转换方法来解决这个问题。
成功解决:java.lang.String cannot be cast to java.lang.Integer
|
22天前
|
安全 Java API
Java系类 之 String、StringBuffer和StringBuilder类的区别
这篇文章讨论了Java中`String`、`StringBuffer`和`StringBuilder`三个类的区别,其中`String`是不可变的,而`StringBuffer`是线程安全的可变字符串类,`StringBuilder`是非线程安全的可变字符串类,通常在单线程环境下性能更优。
Java系类 之 String、StringBuffer和StringBuilder类的区别