string
记录STL中string的基本操作:
1、构造函数
string s1; // si = ""
string s2("Hello"); // s2 = "Hello"
string s3(4, 'K'); // s3 = "KKKK" 生成一个字符串,包含4个K
string s4("12345", 1, 3); //s4 = "234",即 "12345" 的从下标 1 开始,长度为 3 的子串
2、赋值
- 使用直接赋值:
string s1,s2; s1 = "Hello"; // s1 = "Hello" s2 = s1; s2 = 'K'; // s2 = "K”
- 使用assign函数赋值:
string s1,s2; //1、直接赋值字符串ch常量 s1.assign("Hello"); //2、直接赋值字符串变量 s2.assign(s1); //3、赋值num个字符c s2.assign(4,'K'); // s2="KKKK" //4、赋值子串 s2.assign(s1,2,3); //s2="llo"
3、元素访问
at
[]
front 访问首字符
back 访问最后的字符
string s1("Hello"); char c; //1、at c = s1.at[0]; //返回请求的字符引用,请求值不能超出字符串的size //2、[] c = s1[0]; //3、front c = s1.front(); //等价于s1[0] //4、back c = s1.back(); //等价于s1[4]
4、迭代器
begin 返回指向起始的迭代器
end 返回指向末尾的迭代器
——图片来自cppreference.com
5、容量
- empty() 检查字符串是否为空
- length() 字符串长度
- max_size() 返回字符数的最大值
6、操作
1)、增删
insert | 插入字符 |
|
erase | 删除字符 |
|
push_back | 添加字符到结尾 | / |
pop_back | 移除末尾字符 | / |
+= | 后附字符到结尾 |
|
clear |
清除内容 如同通过执行 clear后不改变capacity |
/ |
2)、子串
substr | 返回子串 [pos, pos+count) |
/ |
3)、查找
find | 返回找到的子串的首字符位置,若找不到,返回string::npos |
|
4)、比较
compare |
|
|
5)、复制与替换
copy | 返回复制的字符数 |
|
replace | / |
|
6)、stringstream
stringstream是包含在<sstream>中的,其中定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。<sstream> 主要用来进行数据类型转换,由于 <sstream> 使用 string 对象来代替字符数组(snprintf方式),就避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。简单说,相比c库的数据类型转换而言,<sstream> 更加安全、自动和直接。
用法之一:类型转换
// int -> string
stringstream sstream;
string strResult;
int nValue = 1000;
// 将int类型的值放入输入流中
sstream << nValue;
// 从sstream中抽取前面插入的int类型的值,赋给string类型
sstream >> strResult;
用法之二:清空流
清空
stringstream
有两种方法:clear()
方法以及str("")
方法,这两种方法有不同的使用场景。
在多次数据类型转换的场景下,必须使用 clear()
方法清空 stringstream
,不使用 clear()
方法或使用 str("")
方法,都不能得到数据类型转换的正确结果。
参考: