String
最后更新于
最后更新于
C++11以前有很多原因不能提供一个通用的split
,比如说需要考虑split
以后的结果存储在什么类型的容器中,可以是vector
、list
等等包括自定义容器,很难提供一个通用的;再比如说需要split
的源字符串很大的时候运算的时间可能会很长,所以这个split
最好是lazy
的,每次只返回一条结果。
目前发现的史上最优雅的一个实现是这样的:
但是分隔符只能是字符,为字符串时并不能有效,下面提供一种实现支持分割符是字符串的情况:
从C++11开始,标准库中提供了regex
,regex
用来做split
:
C++17提供的string_view
可以加速上面提到的第一个split
实现,减少拷贝,性能有不小提升,参看此文: Speeding Up string_view String Split Implementation。
从C++20开始,标准库中提供了ranges,有专门的split view,只要写str | split(' ')就可以切分字符串,如果要将结果搜集到vector中,可以这样用:
其实C语言里面也有一个函数strtok
用于char*
的split
,例如:
这里要注意的是strtok
的第一个参数类型是char*
而不是const char*
,实际上strtok
会改变输入的字符串。
函数名称
功能
构造函数
产生或复制字符串
析构函数
销毁字符串
=,assign
赋以新值
Swap
交换两个字符串的内容
+ =
,append()
,push_back()
添加字符
insert ()
插入字符
erase()
删除字符
clear ()
移除全部字符
resize ()
改变字符数量
replace()
替换字符
+
串联字符串
==,! =,<,<=,>,>=,compare()
比较字符串内容
size()
,length()
返回字符数量
max_size()
返回字符的最大可能个数
empty()
判断字符串是否为空
capacity()
返回重新分配之前的字符容量
reserve()
保留内存以存储一定数量的字符
[]
,at()
存取单一字符
>>
,getline()
从 stream 中读取某值
<<
将值写入 stream
copy()
将内容复制为一个 C - string
c_str()
将内容以 C - string 形式返回
data()
将内容以字符数组形式返回
substr()
返回子字符串
find()
搜寻某子字符串或字符
begin()
,end()
提供正向迭代器支持
rbegin()
,rend()
提供逆向迭代器支持
get_allocator()
返回配置器