• stl String


    构造函数

    表达式

    效果

    string s

    生成一个空的 string s

    string s(str)

    Copy 构造函数,创建一个 string str 的拷贝

    string s(rvStr)

    Move 构造函数,创建一个 string 并将 rvStr 的内容搬移给 s

    string s(str,stridx)

    将 string str 内“始于位置 stridx”的部分当作字符串 s 的初值

    string s(str,stridx,strlen)

    将 string str 内“始于位置 stridx 且长度最多 strlen”的部分当作字符串 s 的初值

    string s(cstr)

    以 C-string cstr 作为字符串 s 的初值

    string s(chars,charslen)

    以字符数组 chars 的前 charslen 个字符作为字符串 s 的初值

    string s(num,c)

    生成一个字符串,包含 num 个 c 字符

    string s(beg,end)

    以 [beg,end) 区间内的字符作为字符串 s 的初值

    string s(initlist)

    以 initlist 内的字符作为字符串 s 的初值

    构造函数

    表达式

    效果

    s.~string()

    销毁所有字符,释放内存

    String 和 C-String

    '\0'在 string 之中不具有特殊意义,与其它字符的地位完全相同,但在 C-string 中标识结束

    null pointer (NULL) 不可取代 nullptr 或 char * 参数,因为 NULL 具有整数类型

    String —> 字符数组 / C-String

    data()、c_str()

    以字符数组的形式返回 string 内容,其结果是一个包含 '\0' 字符的有效 C-string

    返回的字符数组由该 string 拥有,即调用者不可以改动它或释放其内存

    返回值的有效期限在下次调用 non-const 成员函数时即告终止

    copy()

    将 string 内容复制到“调用者提供的字符数组”中,其末尾不添加 '\0' 字符

    大小和容量

    size()、length()

    作用:返回 string 的现有字符数

    PS:size() 和 length() 两个函数等效

    empty() 检验字符数是否为 0,即字符串是否为空,比 size() 和 length() 更快,优先使用

    max_size()

    作用:返回 string 可存放的最大字符串的长度

    capacity()

    作用:返回 string 分配的存储容量

    元素访问

    访问方法:

    • 下标操作符 [ ]
    • 成员函数 at()

    注意:

    • Operator [ ] 不检查索引是否有效,at() 会检查若调用 at() 时指定的索引无效,系统会抛出 out_of_range 异常。若调用 operator [ ] 时所指定的索引无效,其行为不明确,可能访问非法内存,因而引起某些边缘效应甚至崩溃
    • 最末字符的更后面位置也有效,故当前实际字符数可被当成一个有效的索引
    • front() 相当于 [0]
    • 对于 at(),当前字符个数不是有效索引
    • 对一个空 string 调用 back(),会导致不明确的行为

    比较

    操作数:string、C-string

    <、<=、>、>=

    比较依据:字典序

    compare()

    返回值:整数值,0 表示相等,小于 0 表示小于,大于 0 表示大于

    更改内容

    赋值

    operator =

    作用:对 string 赋予新值

    新值:string、C-string、单一字符

    成员函数 assign()

    string a;

    string b;

    1.字符串直接赋值

    a.assign(b);

    a.assign("hyy");

    2.一个字符串的子串赋值给另一个字符串

    a.assign(b,begin,len);

    从字符串 b 的第 begin 个字符开始向后 len 个字符(包括 begin)的字符串赋值给字符串 a

    3.从字符串的某一个字符串开始到结束赋值给另一个字符串

    a.assign(b,begin);

    4.从字符串开始到字符串的某一个字符赋值给另一个字符串

    a.assign("hyy",len);

    5.用相同的 n 个字符给字符串赋值

    a.assign(n,'c');

    6.使用迭代器赋值

    a.sssign(b.begin(),b.end());

    交换

    swap()

    作用:交换两个 string 内容

    令 string 为空

    s = "" ;

    s.clear();

    s.erase();

    安插

    operator +=:将单一实参附加于 string 末尾

    append():接受多个实参指明附加值

    insert():需知道安插位置的索引,新字符将被安插于此位置之后;不接受“索引+单字符”的实参,必须传入一个 string 或加上一个额外数字

    s.insert ( 0 , ' ' ) ; //ERROR

    s.insert ( 0 , " " ) ; //OK

    push_back():向 string 末尾添加字符

    移除

    erase()

    pop_back():删除 string 最后一个字符

    替换

    replace()

    改变字符数量

    resize():若实参指出的大小比现有字符数少,末尾字符被移除;如实参指出的大小比现有字符数多,则以某个字符填充尾部,可以传入一个字符参数作为填充字符,否则以字符类型 default 构造函数建立填充字符

    子串

    substr():提取子串

    合并字符串

    operator +

    I/O 操作符

    operator >>:从 input stream 读取一个 string

    operator >> 的执行方式:

    1.若设立了 skipws flag,则跳过开头空格

    2.持续读取所有字符,直到发生以下情形之一:

        a.下个字符为空白字符

        b.Stream 不再处于 good 状态

        c.Stream 的 width() 结果大于 0,且目前已读出 width() 个字符

        d.已读取 max_size() 个字符

    3.Stream width() 被设为0

    operator <<:把一个 string 写到 output stream

    getline():读取所有字符,包括开头的空白字符,直到遭遇分行符或 end-of-file。分行符会被读取出来但不会不会被附加到结果上

    搜索和查找

    返回值:返回字符序列中“符合查找条件”的第一个字符的索引

    参数:

    1. 第一个实参,被查找的对象
    2. 第二个实参,string 内查找的起点(索引),可有可无
    3. 第三个实参,欲查找的字符个数,即查找范围,查找长度,可有可无

    数值转换

    • 会跳过前导的任何空白字符
    • 允许返回“被处理的 string 的最末字符”后的第一个字符的索引
    • 若转换无法发生,抛出 std::invalid_argument ;若被转换值超出返回类型可表达范围,抛出 std::out_of_range
    • 对于整数,可以传递基数

    迭代器

    相关函数

    包含 beg 但不包含 end,是半开区间,[beg,end)

  • 相关阅读:
    Redis_第二章_实战篇_第一节_ 短信登录
    大数据下一代变革之必研究数据湖技术Hudi原理实战双管齐下-上
    Python配置镜像源
    Maven--如何下载JSONObject相关依赖架包
    UDP就一定比TCP快吗?
    社区志愿者招募管理系统
    SEO内链优化的8个终极策略
    vscode配置conda环境
    Redis查看集群状态有节点显示fail,连接失败
    【MySQL Router】使用 systemd 管理 MySQL Router
  • 原文地址:https://blog.csdn.net/weixin_65951505/article/details/133768850