C++ string类 使用方法(各种常用函数的介绍)
零、前情提要
在 C 中,字符与数组拥有同类的使用方法,操作直观,浅显易懂,之前的两篇扫盲贴有做简要分析:
1、字符串基础1:字符数组介绍
2、字符串基础2:常用的字符串函数介绍
一、string 类简介
string 类是 C++ 中对于字符串处理封装的类,可以理解为,一串字符就是一个整体,内部是一个类似数组的容器,并且自带丰富的功能函数。
对于字符与字符串的模拟与各种操作的题目,在各类OI基础赛事中层出不穷。
掌握基础的字符串函数和各类读入、修改、输出等奇奇怪怪的操作技巧非常有必要。灵活性和便利性远远超过 C 中的 字符数组,请结合以下的简介,多加练习以熟练食用。
二、函数简介大纲
三、常用函数的功能介绍
3.0 几个关键字符
字符串变量名:s、x
位置变量名:pos、px
长度变量名:lens、lenx
3.1 基础功能函数
| 序号 | 功能 | 代码样例 | 效果介绍 |
|---|---|---|---|
| 1 | 定义 | string s; | 定义一个串,名字为 s |
| 2 | 初始化1 | string s(x); | 定义一个名字为 s 的串,获得 x 串的内容 |
| 3 | 初始化2 | string s(x,px,dx); | 定义 s 串,获得 x 串从 px 位起的 dx 个字符 |
| 5 | 输入1 | cin>>s; | 读入 s 串(以空格或换行结束) |
| 6 | 输入2 | getline(s); | 读入 s 串(以换行结束) |
| 7 | 输入3 | istringstream is(input); is>>s1>>s2>>s3>>s4; | 将一个句子读入流中, 将流中的串拆分成多个单词,存入不同的串中 |
| 8 | 赋值1 | s=x; // s.assign(x); | 将 x 串的值赋给 s 串 |
| 9 | 赋值2 | s.assign(x,px,dx); | 将 x 串从 px 位起的 dx 个字符赋值给 s 串 |
| 11 | 求长度 | s.size(); // s.length(); | 返回 s 串的元素个数 |
| 12 | 输出1 | cout<<s; | 输出整个 s 串 |
| 13 | 输出2 | cout<<s[pos]; | 输出 s 串中,下标为 pos 的字符 |
3.2 外部功能函数
| 序号 | 功能 | 代码样例 | 效果介绍 |
|---|---|---|---|
| 1 | 交换 | swap(s1,s2); | 交换两个串 |
| 2 | 拼接1 | s+=x; // s.append(x); // s.push_back(x); | 在 s 串的尾部插入串 x |
| 3 | 拼接2 | s.append(x,px,nx); | 在s串的尾部插入串x从px位起的nx个字符 |
| 4 | 插入1 | s.insert(pos,x); | 在第pos个元素之后插入x |
| 5 | 插入2 | s.insert(pos,x,px,dx); | 在第pos个元素之后插入x串从第px位起的dx个字符 |
| 6 | 替换1 | s.replace(pos,ds,x); | 删除从pos开始的ds个字符,然后在pox处插入字符串x |
| 7 | 替换2 | s.replace(pos,ds,x,px,dx); | 删除从pos开始的ds个字符, 然后在pos处插入字符串x从px位起的dx个字符 |
| 8 | 类型转换1 | int a=stoi(str1); | 将字符串转换为整数 |
| 9 | 类型转换2 | int a; string s=to_string(a); | 将整数转换为字符串 |
3.3 内部功能函数
| 序号 | 功能 | 代码样例 | 效果介绍 |
|---|---|---|---|
| 1 | 排序 | sort(s.begin(),s.end()); | 将 s 串内部按字典序排序 |
| 2 | 翻转 | reverse(s.begin(),s.end()); | 翻转 s 串 |
| 3 | 查找字串首次 出现位置1 | s.find(x) | 查找子串x在s中第一次出现的首个位置, 返回首字母下标;-1表示找不到子串 |
| 4 | 查找字串首次 出现位置2 | s.find(x,pos) | 查找子串x在s的[pos,s.lenght()-1]区间出现的首个位置, 返回首字母下标;-1表示找不到子串 |
| 5 | 查找字串末次 出现位置1 | s.rfind(x) | 查找子串x在s中第一次出现的首个位置, 返回首字母下标;-1表示找不到子串 |
| 6 | 查找字串末次 出现位置2 | s.rfind(x,pos) | 查找子串x在s的[0,s.lenght()-1-pos]区间出现的首个位置, 返回首字母下标;-1表示找不到子串 |
| 7 | 查找子串数量 | s.count(x) | 返回子串x在s中出现的次数 |
| 8 | 截取子串 | s.substr(pos,len) | 返回 s 串中下标pos起 截取长度为len的子串 |
| 9 | 删除元素 | s.erase(pos,len) | 删除 s 串下标pos起 长度为len的部分 |