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。分行符会被读取出来但不会不会被附加到结果上

搜索和查找

stl String_第1张图片

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

参数:

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

数值转换

stl String_第2张图片

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

迭代器

相关函数

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

stl String_第3张图片

你可能感兴趣的:(stl,c++,stl)