100000598 - 《算法笔记》6.3小节——C++标准模板库(STL)介绍->string的常见用法详解

《算法笔记》6.3小节——C++标准模板库(STL)介绍->string的常见用法详解

1、头文件

#include <string>
using namespace std;

2、定义

string str;
str="ABC";
//初始化时赋值
string str = "ABC";

读入输出只能用cin和cout

string str;
cin>>str;
cout<<str;

string类型转换为字符数组用c_str()函数

printf("%s\n",str.c_str());

3、访问
①下标访问,通字符数组

printf("%c",str[5]);

②通过迭代器访问
string和vector都支持对迭代器加减数字

string::iterator ip=str.begin();
printf("%c", *(ip+4));	//此时*(ip+4)等价于str[4];
//用*ip访问
for(string::iterator ip=str.begin();ip!=str.end();ip++){
	printf("%c", *ip);
}

4、函数
①拼接两个字符串+=

str3=str1+str2;
str1+=str2;

②字符串比较,规则为字典序
可直接用==, !=, <, <=, >, >=进行比较

③元素个数/长度size()/length()
时间复杂度O(1)

//返回值为unsigned,一般用%d
num=str.size();
num=str.length();

④插入insert
a. insert(pos,string);在pos号位置插入字符串string,pos∈[1,str.length());
b. insert(ip, ip2, ip3);在原字符串str的ip位置,插入以ip2和ip3为收尾迭代器的字符串,即串[ip2, ip3)插到ip的位置

//在str[3]的位置插入str2或abc
str.insert(3,str2);
str.insert(3,"abc");
//在str的第三个位置即str[2]插入str2[2]至str2结尾的字符串
str.insert(str.begin()+3,str2.begin().3,str.end());

⑤清空clear
时间复杂度O(1)

si.clear();

⑥删除单个元素或一个区间内的所有元素eraser
时间复杂度O(N)

//删除迭代器所在位置的元素,如删除第4位元素
str.eraser(str.begin()+4);
//删除[first,last)区间内的元素,如删除第2位至末尾之间的元素
str.eraser(str.begin()+2,str.end())
//删除从第pos位开始,长度为len的字符串
str.eraser(str.begin()+pos, 5);

⑦得到从第pos开始,长度为len的子串sbustr()
substr(pos,len)
⑧特殊常数
string::npos是一个常数,unsigned int类型,值为-1/4294967295
可以作为find查找失败的返回值
⑨查找子串find()
时间复杂度O(MN);
查找str2在母串str中第一次出现的位置str.find(str2);
从母串str的第pos位开始,查找str2在母串str中第一次出现的位置str.find(str2,pos);
⑩子串替换replace()
时间复杂度O(str.length());
把母串str从第pos位开始,长度为len的子串替换为str2:str.reolace(pos,len,str2);
把母串str的迭代器[ip1,ip2)范围内的子串替换为str2:str.replace(ip1,ip2,ste2);

1983 Problem A 字符串处理
写不出来TAT
贴一个别人的代码和分析:
代码1
代码2+分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值