C++标准库中Strings字符串使用

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++标准库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值