C++ 字符串 string 常用函数小笔记
适用于:
洛谷字符串题
算法竞赛基础
头文件:
#include <string>
#include <algorithm>一、字符串基本概念
string s = "hello";字符串本质:
h e l l o
0 1 2 3 4访问字符:
s[i]例如:
cout << s[0]; // h二、字符串长度
size() / length()
获取字符串长度。
s.size()例子:
string s = "hello";
cout << s.size();输出:
5说明:
size() 和 length() 完全一样三、字符串查找
find()
查找字符或字符串第一次出现的位置。
查找字符
s.find('a')例子:
string s = "hello";
cout << s.find('l');输出:
2因为:
h e l l o
0 1 2 3 4查找字符串
s.find("abc")例子:
string s = "abcdef";
cout << s.find("cd");输出:
2找不到时
返回:
string::npos常见写法:
if(s.find('/') != string::npos)//代表字符串里存在 '/'
{
cout<<"存在 / ";
}四、字符串截取
substr()
用于截取子字符串。
基本格式
s.substr(起始位置, 长度)//从几开始,取几个长度例子
string s = "abcdef";
cout << s.substr(2,3);输出:
cde解释:
从下标2开始
取3个字符如果不写长度
s.substr(起始位置)例子:
string s = "abcdef";
cout << s.substr(3);输出:
def常见用途(分割字符串)
例如:对于一个字符串,定义一个int下标存储寻找到字符的位置记为pos,分成两个新字符串截取从0到pos,从pos+1到结束
700/27
int pos = s.find('/');
string a = s.substr(0,pos);
string b = s.substr(pos+1);结果:
a = "700"
b = "27"五、字符串反转
reverse()
来自头文件:
#include <algorithm>写法:
reverse(s.begin(), s.end());例子:
string s = "12345";
reverse(s.begin(), s.end());
cout << s;输出:
54321六、删除字符
erase()
删除字符串中的字符。
删除某个位置
s.erase(位置)例子:
string s = "12345";
s.erase(s.begin());结果:
2345删除指定位置字符
s.erase(s.begin()+2);结果:
1245删除:
3删除一段字符
s.erase(起始位置,长度) //从多少开始删多少长度的字符例子:
string s = "abcdef";
s.erase(2,3);结果:
abf删除:
cde七、删除末尾字符
pop_back()
弹出删除最后一个字符。
s.pop_back();例子:
string s = "12345";
s.pop_back();结果:
1234说明:
等价于删除最后一个字符八、获取末尾字符
back()
获取最后一个字符。
s.back()等价于:
s[s.size()-1]例子:
string s = "hello";
cout << s.back();输出:
oend() != back() end是迭代器,指向最后一个元素的后面,无元素
s.back() == s[s.size()-1] 是指一个元素
九、获取第一个字符
front()
s.front()等价于:
s[0]例子:
string s="hello";
cout<<s.front();输出:
h十、添加字符
push_back()
在字符串末尾添加字符。
s.push_back('a');例子:
string s="abc";
s.push_back('d');结果:
abcd十一、遍历字符串
方法1(最常用)
for(int i=0;i<s.size();i++)
{
cout<<s[i];
}方法2(范围for)
for(char c:s)
{
cout<<c;
}说明:
c 是字符本身
不是下标十二、竞赛常用字符串套路
算法竞赛中最常见的字符串处理步骤:
1 查找符号
s.find('.')
s.find('/')
s.find('%')2 分割字符串
s.substr()3 反转字符串
reverse()十三、字符串常用函数总结表
十四、字符串算法题常见套路
大部分题目流程:
读取字符串
↓
find 查找符号
↓
substr 分割字符串
↓
reverse 处理
↓
erase / pop_back 删除字符
↓
输出结果
本文为个人学习记录,转载请注明出处:[万俟季先生的个人博客](https://miloaether.loc.cc)(https://blog.ivano.cyou/)