【STL学习笔记】string


主要参考

https://wyqz.top/p/870124582.html


一、简介

#include <string>
using namespace std;

变长字符串,学C时心心念念的东西……和char数组相比,元素也是char类型,但不以’\0’结尾。

二、初始化

空字符串:

string s1;

C的风格:

string s2("hello");

拷贝与子串:

string s3(s2);
string s4("hello", pos, len);	// 从位置pos开始取len个字符;只有一个整数参数时默认为长度,从位置0开始
string s5(s2, pos, len);	// 同上,只有一个整数参数时默认为位置,截取到末尾
string s6(s2.begin(), s2.begin() + 3);

重复字符:

string s7(5, 'a');	// aaaaa

三、运算符

比较运算符<, >, <=, >=, ==, !=,还可以与cstring比较:

cout << (s3 > "he") << endl;	// 输出1,即"hello" > "he\0"

拼接运算+:

cout << s3 + s7 << endl;	// helloaaaaa

四、函数

先是和vector类似的一部分:

函数作用
s.size() / s.length()返回实际字符数
s.capacity()总共可容纳字符数
s.max_size()当前编译环境下string最大字符数(这东西会用到吗)
s.reserve(n)预分配n个字符的空间
s.empty()判空
s.at(i)有边界检查的访问
s.begin() / s.end()迭代器
s.front() / s.back()首尾元素
s.push_back(‘a’)在末尾添加字符
s.pop_back()删除末尾字符
s.insert(pos, ‘a’)在迭代器pos处插入字符
s.erase(pos)删除迭代器pos处的字符
s.erase(p1, p2)删除[p1, p2)
s.clear()清空
s.swap(s1)交换s和s1

然后是特有(?)的:

函数作用
s.append(“str”)在末尾添加字符串(像拼接运算+)
s.erase(i, n)从索引i开始删除n个字符
s.c_str()转换为C-string
s.replace(i, n, str)把从索引i开始的n个字符替换为str(n小于str长度时会满足str)
s.replace(i, n1, n2, c)把i开始的n1个字符替换为n2个字符c(n2>n1时会满足n2,n2<n1时会截断)
s.replace(p1, p2, str)把迭代器所指范围[p1, p2)替换为str
s.substr(i, n)截取索引i开始的n个字符

以及一系列查找函数,其中索引i都可以不写,正向查找时默认为0,反向则默认为尾:

函数作用
s.find(str, i)从索引i开始正向查找子串str,str也可以换成字符c,返回下标,找不到返回-1
s.rfind(str, i)同上,但向前查找
s.find_first_of(str, i)在s中从i开始查找str中任意字符
s.find_last_of(str, i)上面的反向查找版
s.find_first_not_of(str, i)在s中从i开始查找不在str中的字符
s.find_last_not_of(str, i)上面的反向查找版

还提到了大小写转换,但似乎不太常用,先插个眼,用到再说)

五、读入

cin读取遇到空格、回车结束;getline(cin, s)遇到回车结束,但会读取到前一次剩下的回车,所以要先把这个回车读出来。

string s1, s2;
cin >> s1;
cin.ignore();	// 忽略一个字符
getline(cin, s2);

cin/cout解锁,保证性能(去问AI的时候给出了这段代码,省事!):

// CSP标准模板开头
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    // 代码主体
}

总结

该去食堂抢饭了……那么string也算是初步学完了(吧)。感觉内容很基础但需要练习,但题目想必会涉及到algorithm库,晚上看一看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值