【c++】STL之string用法总结

转载自:https://blog.csdn.net/qq_42659468/article/details/90381985

介绍

  • String类:按照类的方式进行动态管理字符串
  • 底层:是一种顺序表的结构,元素是char类型的字符

用法

1 头文件

#include <string>

2 string类的常用构造函数:

string  str——构造空的string类对象,即空字符串
string str(str1)——str1 和 str 一样
string  str("ABC")——等价于 str="ABC"
string  str("ABC",strlen)——等价于 "ABC" 存入 str 中,最多存储 strlen 个字节

string  str("ABC",stridx,strlen)——等价于 "ABC" 的stridx 位置,
作为字符串开头,存到str中,最多存储 strlen 个字节

string  str(srelen,'A')——存储 strlen 个 'A' 到 str 中

3 元素的访问

  • 1.operator[],可以直接通过str[i]访问元素
  • 2.at(),可以直接通过str.at(i)访问元素

4 assign函数:

  • str.assign(“ABC”)——清空字符串,并设置为 “ABC”
  • str.assign(“ABC”,2)——清空字符串,并设置为"AB",保留两个字符
  • str.assign(“ABC”,1,1)——清空字符串,设置为 “ABC” 中的从 位置1 开始,保留 1个 字符
  • str.assign(5,‘A’)——清空字符串,然后字符串设置为 5个 ‘A’
  • str.length()——求字符串长度
  • str.size()——和 length() 一样
  • str.capacity()——获取容量,包含了不用增加内存就能使用的字符数
  • str.reasize(10)——设置当前 str 的大小为10,若大小大与当前串的长度,\0 来填充
  • str.reasize(10,char c)——设置当前 str 的大小为10,若大小大与当前串的长度, 字0符c 来填充
  • str.reserve(10)——设置str的容量 10,不会填充数据
  • str.swap(str1)——交换 str1 和 str 的字符串
  • str.push_back(‘A’)——在str末尾添加一个字符 ‘A’ ,参数必须是字符形式(但是好像没有pop_back,网上说有,但是自己试的时候发现好像没有)
  • str.append(“ABC”)——在str末尾添加一个字符串 “ABC”,参数必须是字符串形式

5 insert函数方法:

    str.insert(2,3,'A')——在str下标为2的位置添加 3个 字符'A'
    str.insert(2,"ABC")——在str下标为2的位置添加 字符串 "ABC"
    str.insert(2,"ABC",1)——在str下标为2的位置添加 字符串 "ABC"1个 字符
    str.insert(2,"ABC",1,1)——在str下标为2的位置添加 字符串 "ABC" 中
    从位置 1 开始的 1 个字符

//注:上个函数参数中加粗的 1 ,可以是 string::npos,这时候最大值,
//从 位置1 开始后面的全部字符

    str.insert( iterator pos, size_type count, CharT ch )——在 str 中,
    迭代器指向的 pos位置 插入 count个 字符 ch

	s4.insert(++str1.begin(),2,'a');        结果:s4:ABCD    ->    AaaBCD

    str.insert( iterator pos, InputIt first, InputIt last )——
    在 str 中,pos位置 插入 str1 的 开始位置 到 结束为止

6 擦除

  • str.erase(2)——删除 下标2 的位置开始,之后的全删除
  • str.erase(2,1)——删除 下标2 的位置开始,之后的 1个 删除
  • str.clear()——删除 str 所有
  • str.replace(2,4,“abcd”)——从 下标2 的位置,替换 4个字节 ,为"abcd"
  • str.empty()——判空

7 反转相关:

(位于头文件<algorithm>)
    reverse(str.begin(),str.end())——str的开始 到 结束字符反转 
	reverse(s4.begin,s4.end);        结果:s4:ABCD   ->    DCBA

8 查找相关:

  • 查找成功返回位置 ,查找失败,返回-1
  • find函数:从头查找
	str.find('A')——查找 'A'
	str.find("ABC")——查找 "ABC"
	int n=s4.find("ABC");   s4:ABCD    ->   n = 0
	str.find('B',1)——从 位置1 处,查找'B'
	str.find("ABC",1,2)——从 位置1 处,开始查找 'ABC' 的前 2个 字符
  • rfind函数:从尾部查找
    str.rfind('A')——查找 'A'
    str.rfind("ABC")——查找 "ABC"
	int n=s4.rfind("ABC");   s4:AAAABCD    ->   n = 3
    str.rfind('B',1)——从 位置1 处,向前查找'B'
    str.rfind("ABC",1,2)——从 位置1 处,开始向前查找 'ABC' 的前 2个 字符
  • ind_first_of()函数:查找是否包含有子串中任何一个字符
str.find_first_of("abBc")——查找 "abBc" 和str 相等的任何字符,
"abBc" 中有就返回位置

str.find_first_of("abBc",1)——查找 "abBc" 和str 相等的任何字符,
从 位置1 处,开始查找"abBc" 中的字符,"abBc" 中有的就返回位置

str.find_first_of("abBc",1,2)——查找 "abBc" 和str 相等的任何字符,
从 位置1 处,开始查找"abBc" 的前 2个 字符,"abBc" 中有的就返回位置
  • find_last_of()函数:find_first_not_of ()末尾查找, 从末尾处开始,向前查找是否包含有子串中任何一个字符
    str.find_last_of("abBc")——查找 "abBc" 和str 相等的任何字符,
    向前查找,"abBc" 中有的返回位置
    
    str.find_last_of("abBc",1)——查找 "abBc" 和str 相等的任何字符,从
    位置1 处,开始向前查找"abBc" 中的字符,"abBc" 中有的就返回位置
    
    str.find_last_of("abBc",10,2)——查找 "abBc" 和str 相等的任何字符,
    从 位置10 处,开始向前查找"abBc" 的前 2个 字符,"abBc" 中有的就返回位置

9 拷贝相关的:

    str1=str.substr(2)——提取子串,提取出 str 的 下标为2 到末尾,给 str1
    
    str1=str.substr(2,3)——提取子串,提取出 str 的 下标为2 开始,
    提取三个字节,给 str1
    
    const char* s1=str.data()——将string类转为字符串数组,
    返回给s1

	char* s=new char[10]
    str.copy(s,count,pos)——将 str 里的 pos 位置开始,拷贝 count个 字符,
    存到 s 里

10 比较相关的函数:

  • compare函数:完全相等返回0;完全不等返回小于0;部分相等返回大于0
示例对象:string str(“abcd”)
str.compare(“abcd”)——完全相等,返回0
str.compare(“dcba”)——返回一个小于0的值
str.compare(“ab”)——返回大于0的值
str.compare(str)——相等

str.compare(0,2,str,2,2)——用str的 下标0 开始的 2个字符 和 str的 下标2 开始的
 2个 字符比较——就是用 "ab""cd”" 比较,结果小于零
 
str.compare(1,2,”bcx”,2)——用str的 下标1 开始的 2个字符 和 "bcx"的 前 2个 
字符比较——就是用 "bc""bc”" 比较,结果是零
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值