C++标准库中Strings字符串使用
字符串操作函数
构造函数:产生或复制字符串
析构函数:销毁字符串
=,assign():赋以新值
swap():交换两个字符串的内容
+=,append(),push_back():添加字符
insert():插入字符
erase():删除字符
clear():移除全部字符(使之为空)
resize():改变字符数量(在尾端删除或添加字符)
replace():替换字符
+:串联字符串
==,!=,<,<=,>,>=,compare():比较字符串内容
size(),length():返回字符数量
max_size():返回字符的最大可能个数
empty():判断字符串是否为空
capacity():返回重新分配之前的字符容量
reverse():保留一定量内存以容纳一定数量的字符
[],at():存取单一字符
>>,getline():从stream中读取某值
<<:将某值写入stream
copy():将内容复制为一个C-string
c_str():将内容以C-string形式返回
data():将内容以字符数组(character array)形式返回
substr():返回某个子字符串(substring)
搜寻函数(find functions):搜寻某个字符串或字符
begin(),end():提供正常的(正向)迭代器支持
rbegin(),rend():提供逆向迭代器支持
get_allocator():返回配置器(allocator)字符串操作参数
const string & str:整个str字符串
const string & str,size_type idx,size_type num:大部分情况下指字符串str中以idx开始的num个字符
const char* cstr:整个C-string cstr
const char* chars,size_type len:字符数组chars中的len个字符
char c:字符c
size_type num,char c:num个字符c
iterator beg,iterator end:区间[beg; end]内所有字符字符串中未提供功能
正则表达式
文本处理(如大写化、大小写不计的字符串比较动作等构造和析构函数
string s:生成一个空字符串s
string s(str):copy构造函数,生成字符串str的一个复制品
string s(str, stridx):将字符串str内“始于位置stridx”的部分,当做字符串s的初值
string s(str, stridx, strlen):将字符串str内“始于位置stridx且长度顶多strlen”的部分,当做字符串s的初值
string s(cstr):以C-string cstr作为字符串s的初值
string s(chars, chars_len):以C-string cstr的前chars_len个字符串作为字符串s的初值
string s(num, c):生成一个字符串,包含num个c字符
string s(beg, end):以区间[beg; end]内的字符作为字符串s的初值
s.~string():销毁所有字符,释放内存字符串转字符数组C-string
data():以字符数组的形式返回字符串内容。由于并未追加’\0’字符,所以返回型别并非有效的C-string
c_str():以C-string形式返回字符串内容,也就是在尾端添加’\0’字符
copy():将字符串内容复制到“调用者提供的字符数组”中。不添加’\0’字符
注意:data()和c_str()返回的字符数组由该字符串拥有。即调用者不可修改它或释放其内存。大小和容量
size()和length():返回string中现有的字符个数。empty()用来检测字符数是否为0,即字符串是否为空。应优先使用empty()函数,它比length()和size()快。
max_size():返回一个string最多能够包含的字符数。返回值一般是索引型别的最大值减1。减1的原因:最大值本身是npos;在实作中,内部缓冲区之后添加一个’\0’操作,以便于C-string使用。一旦某个操作函数使用一个长度大于max_size()的string,length_error异常就会抛出。
capacity():重新分配内存之前,string所能包含的最大字符数。让string拥有足够的容量很重要:
1)重新分配会造成所有指向string的references、pointers和iterators失效;
2)重新分配很耗时。元素存取
operator[]:并不检查索引是否有效,at()则会检查。如果调用at()时指定的索引无效,系统会抛出out_of_ranage异常。
对于operatorp[]的const版本,最后一个字符的后面位置也是有效的。以下操作将导致字符的references和pointers失效
以swap()交换两值
以operator>>()或getline()读入新值
以data()或c_str()输出内容
调用operator[],at(),begin(),rbegin(),end()或rend()之外的任何non-const成员函数
调用任何函数并于其后跟着operator[],at(),begin(),rbegin(),end()或rend()。搜寻函数
find():搜寻第一个与value相等的字符
rfind():搜寻最后一个与value相等的字符(逆向搜寻)
find_first_of():搜寻第一个“与value中的某值相等”的字符
find_last_of():搜寻最后一个“与value中的某值相等”的字符
find_first_not_of():搜寻第一个“与value中任何值都不相等”的字符
find_last_not_of():搜寻最后一个“与value中任何值都不相等”的字符
参数如下:
const string& value:搜寻对象为value(一个string)
const string& value, size_type idx:从*this的idx索引位置开始,搜寻value(一个string)
const char* value:搜寻value(一个C-string)
const char* value, size_type idx, size_type value_len:从*this的idx索引位置开始,搜索value(一个C-string)内的前value_len个字符所组成的字符区间。value内的null字符(’\0’)将不复特殊意义。
const char value:搜寻value(一个字符)
const char value, size_type idx:从*this的idx索引位置开始,搜寻value(一个字符)。迭代器操作函数
s.begin():返回一个随机存取迭代器,指向第一个字符
s.end():返回一个随机存取迭代器,指向最后一个字符的下一个位置
s.rbegin():返回一个逆向迭代器,指向倒数第一个字符(亦即最后一个字符)
s.rend():返回一个逆向迭代器,指向倒数最后一个字符的下一个位置(亦即第一个字符的前一个位置)
string s(beg, end):以区间[beg; end]内的所有字符作为string s的初值
s.append(beg, end):将区间[beg; end]内的所有字符添加与s尾部
s.assign(beg, end):将区间[beg; end]内的所有字符赋值给s
s.insert(pos, c):在迭代器pos所指之处,插入字符c,并返回新字符的迭代器位置
s.insert(pos, num, c):在迭代器pos所指之处插入num个字符c,并返回第一个新字符的迭代器位置
s.insert(pos, beg, end):在迭代器pos所指之处插入区间[beg; end]内的所有字符
s.erase(pos):删除迭代器pos所指字符,并返回下一个字符位置
s.erase(beg, end):删除区间[beg; end]内的所有字符,并返回下一个字符的下一个位置
s.replace(beg, end, str):以string str内的字符替代[beg; end]区间内的所有字符
s.replace(beg, end, cstr):以C-string str内的字符替代[beg; end]区间内的所有字符
s.replace(beg, end, cstr, len):以字符数组str的前len个字符替代[beg; end]区间内的所有字符
s.replace(beg, end, num, c):以num个字符c替代[beg; end]区间内的所有字符
s.replace(beg, end, newBeg, newEnd):以[newBeg, newEnd]区间内的所有字符替代[beg; end]区间内的所有字符
参考文献:C++标准库