别看了,在加载了......

文章背景图

String小计

2026-03-14
15
-
- 分钟
|

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();

输出:

o

end() != back() end是迭代器,指向最后一个元素的后面,无元素

s.back() == s[s.size()-1] 是指一个元素

函数

含义

begin()

第一个元素位置

end()

最后一个元素后面

back()

最后一个元素

front()

第一个元素


九、获取第一个字符

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()

十三、字符串常用函数总结表

函数

作用

size()

字符串长度

find()

查找字符

substr()

截取字符串

reverse()

反转字符串

erase()

删除字符

pop_back()

删除末尾

push_back()

末尾添加

back()

最后一个字符

front()

第一个字符


十四、字符串算法题常见套路

大部分题目流程:

读取字符串
      ↓
find 查找符号
      ↓
substr 分割字符串
      ↓
reverse 处理
      ↓
erase / pop_back 删除字符
      ↓
输出结果


本文为个人学习记录,转载请注明出处:[万俟季先生的个人博客](https://miloaether.loc.cc)(https://blog.ivano.cyou/)

评论交流

文章目录