简介

区别于#include<string.h>头文件,#include<string>头文件中的函数专门用于处理C++中string字符串。而前者是用来处理C语言中char数组的头文件。


常用函数

一、运算符: +、=、[]

1、在C++中,string重载了+、=、和[],可以让我们十分方便的对字符串进行运算。

#include<iostream>
#include<string>
using namespace std;
int main() {string s1 = "123", s2 = "567";string s3 = s1 + s2;cout << s3 << endl;           //实现等号赋值, 加号串联cout << s3[0] << endl;     //实现对字符串中某个值的访问return 0;
}

输出:
123567
1



二、求长度:length()、size()

二者都可以用来求长度。length()为获取字符串长度。 size()为获取字符串这个容器中元素的个数

#include<iostream>
#include<string>
using namespace std;
int main() {string s1 = "123";cout << s1.length() << endl;cout << s1.size() << endl;return 0;
}

输出:
3
3



三、翻转字符串:reverse()

它本是#include<algorithm>头文件中的函数, 但在字符串中应用非常广泛,因此我选择把它加入string头文件中讲解。

1、实现对全部字符串的翻转。

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main() {string s1 = "12345";reverse(s1.begin(), s1.end());cout << s1 << endl;return 0;
}

输出:
54321


2、通过使用迭代器, 还可以实现对指定位置的翻转。

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main() {string s1 = "12345";string::iterator it = s1.begin();reverse(it, it+3);cout << s1 << endl;return 0;
}

输出:
32145



四、判断字符串是否为空:empty()

如果为空,则值为1,反之为0

#include<iostream>
#include<string>
using namespace std;
int main() {string s1 = "12345";if(s1.empty() == 1) cout << "字符串为空";else cout << "字符串非空";return 0;
}

输出:
字符串非空



五、字符串清空函数:clear()

将字符串清空

#include<iostream>
#include<string>
using namespace std;
int main() {string s1 = "12345";s1.clear();if(s1.empty() == 1) cout << "字符串为空";else cout << "字符串非空";return 0;
}

输出:
字符串为空



六、删除字符串:erase()

用法为:erase(int x, int num),从x位置向后删除(不包括x),删除num个字符。

#include<iostream>
#include<string>
using namespace std;
int main() {string s1 = "12345";s1.erase(0, 2);      //从0的位置向后删,删除2个cout << s1; return 0;
}

输出:
345


七、插入函数:insert()

用法为:insert(int x1, int num, char c),从x位置向后插入(不包括x),插入num个字符c。

#include<iostream>
#include<string>
using namespace std;
int main() {string s1 = "12345";s1.insert(0, 1, '1');cout << s1; return 0;
}

输出:
112345



八、查找函数之find()、rfind()、find_first_of()、find_first_not_of()、 find_last_of()、find_last_not_of()

8.1 find()函数

8.1.1、查找指定字符, 从某个位置向后开始查找, 返回该位置,若查找不到,则返回-1
#include<iostream>
#include<string>
using namespace std;
int main() {string s1 = "123145";int find1 = s1.find('1', 1); cout << find1 << endl; int find2 = s1.find('6');cout << find2;return 0;
}

输出:
3
-1


8.1.2、查找字符串, 原理同上, 若查找到返回字符串的起始位置(注意是起始位置)。
#include<iostream>
#include<string>
using namespace std;
int main() {string s1 = "123145";int find1 = s1.find("23", 0); cout << find1 << endl; int find2 = s1.find("56", 0);cout << find2;return 0;
}

输出:
1
-1


8.2 rfind()函数

从后往前查找指定的字符或字符串,用法同上。


8.3 find_first_of()函数

查找第一个等于x字符的位置。 用法同上


8.4 find_first_not_of()函数

查找第一个不等于x字符的位置。 用法同上


8.5 find_last_of()函数

查找最后一个等于x字符的位置(注意是查找最后一个,而不是从后往前查找)。


8.6 find_last_not_of()函数

查找最后一个不等于x字符的位置。 用法同上

注意:只有find和rfind函数可以查找字符串!其他函数查找会出现值不准确的情况!



九、替换函数:replace()

把0后的两个字符替换成A

#include<iostream>
#include<string>
using namespace std;
int main() {string s1 = "12345";s1.replace(0, 2, "A");cout << s1;return 0;
}

输出:
A345



十、字符串转换类函数

10.1 将string转换成char*的函数: c_str()

在做题过程中, printf往往比cout要灵活一些,尤其是在输出指定内容时, 但我们知道,printf无法输出string型字符串,我们就可以用c_str()函数进行转化后输出。

#include<iostream>
#include<string>
using namespace std;
int main() {string s1 = "12345";printf("%s", s1.c_str());return 0;
}

输出:
12345



10.2 将其他类型变量转换成string字符串:to_string()

#include<iostream>
#include<string>
using namespace std;
int main() {double pi = 3.1415926;string s1 = to_string(pi);cout << s1;return 0;
}

输出:
3.1415926



十一、佛祖保佑,永无BUG泛滥

/*                         _ooOoo_o8888888o88" . "88(| -_- |)O\ = /O____/`---'\____.   ' \\| |// `./ \\||| : |||// \/ _||||| -:- |||||- \| | \\\ - /// | || \_| ''\---/'' | |\ .-\__ `-` ___/-. /___`. .' /--.--\ `. . __."" '< `.___\_<|>_/___.' >'"".| | : `- \`.;`\ _ /`;.`/ - ` : | |\ \ `-. \_ __\ /__ _/ .-` / /======`-.____`-.___\_____/___.-`____.-'======`=---='.............................................佛祖镇楼                  BUG辟易佛曰:写字楼里写字间,写字间里程序员;程序人员写程序,又拿程序换酒钱。酒醒只在网上坐,酒醉还来网下眠;酒醉酒醒日复日,网上网下年复年。但愿老死电脑间,不愿鞠躬老板前;奔驰宝马贵者趣,公交自行程序员。别人笑我忒疯癫,我笑自己命太贱;不见满街漂亮妹,哪个归得程序员?*/
/*
_ooOoo_
o8888888o
88" . "88
(| -_- |)O\ = /O
___/`---'\____
.   ' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='.............................................佛曰:bug泛滥,我已瘫痪!*/

如果哪里有困惑,欢迎给笔者留言。

如果这篇博文对你产生了帮助,可以留下小小的一个赞哦,大家的支持是我更新的最大动力~

string所有函数详解——史上最全,最贴心相关推荐

  1. YUV 格式详解-史上最全

    YUV 格式详解 介绍 分类标准 具体分类 I420(属于 YUV 420 Plannar) YV12(属于 YUV 420 Plannar) NV12(属于 YUV 420 Semi-Planar) ...

  2. Java 移位、逻辑运算符详解(~史上最全|吹牛逼)

    目录 一.<< :左移运算符 二.>> :右移运算符 三.>>> :无符号右移 四.& :与运算 五.| :或运算 六.~ :非运算 七.^ :异或运 ...

  3. 【思维导图】富士相机的胶片模拟详解 史上最全资料汇总

    参考资料 当富士X-T4遇上X-Pro3[值不值得买第431期] https://www.bilibili.com/video/BV1oV411C7hJ,http://forum.xitek.com/ ...

  4. format函数_Python学习教程:Python3之字符串格式化format函数详解(上)

    Python学习教程:Python3之字符串格式化format函数详解(上) 概述 在Python3中,字符串格式化操作通过format()方法或者f'string'实现.而相比于老版的字符串格式化方 ...

  5. 我的世界刷猪人塔java版_我的世界速攻猪人塔详解 史上最牛的经验塔

    我的世界速攻猪人塔详解 史上最牛的经验塔.那下面给大家分享的这个是一个可以让所有经验塔自叹不如的速攻猪人塔哦~那到底这个塔是什么呢?那下面就给大家详细的介绍一下吧!有感兴趣的玩家不妨进来看看哦~希望大 ...

  6. python3 format函数_Python学习教程:Python3之字符串格式化format函数详解(上)

    Python学习教程:Python3之字符串格式化format函数详解(上) 概述 在Python3中,字符串格式化操作通过format()方法或者f'string'实现.而相比于老版的字符串格式化方 ...

  7. Java泛型详解-史上讲解最详细的,没有之一

    目录 1. 概述 2. 一个栗子 3. 特性 4. 泛型的使用 4.1 泛型类 4.2 泛型接口 4.3 泛型通配符 4.4 泛型方法 4.4.1 泛型方法的基本用法 4.4.2 类中的泛型方法 4. ...

  8. 数据结构与算法--二进制详解 Python二进制算法详解 史上最详细的二进制讲解 彻底搞懂原码、反码、补码 Python的负数二进制表示形式

    阅读目录 原码.反码.补码 机器数 和 真值 原码.反码.补码的基础 Python中负数的处理 负数的补码如何转成十进制 位运算符 和 移位运算符 基本概述 妙用 二进制涉及的算法 原码.反码.补码 ...

  9. libtorch 常用api函数示例(史上最全、最详细)

    其实pytorch的函数libtorch都有,只是写法上有些出入. libtorch的官方文档链接 class tensor 只是官方文档只是类似与函数申明,没有告诉干嘛的,只能通过函数名字猜了.比如 ...

最新文章

  1. linux显卡驱动版本最好,Linux 用户如何安装 Nvidia 331.67 显卡驱动稳定版本
  2. 针对标签属性data-**的使用
  3. Oracle基本安全之用户、角色和权限操作
  4. java file.listFiles()按文件名称、日期、大小排序
  5. python建模用什么库_Python 建模库介绍 - 树懒学堂
  6. 一个被加入下载QQ盗号木马Trojan.PSW.QQPass.rie代码的网站
  7. 华东师范大学2019年数学分析考研试题
  8. 解决SVN造成的桌面图标问号
  9. Activity跳转并传递
  10. 计算机网络期末考试知识点汇总
  11. Unity3d C#通过使用大华SDK控制大华摄像头旋转、变焦等云台操作和预置点等控制操作(含源码)
  12. linux ps -ef和ps -aux,关于Linux中ps -aux的深入理解
  13. 《软件工程导论第6版》--张海藩 牟永敏 课后答案及其详解 第5章 总体设计
  14. 安搭Share爱情人生
  15. PCL (一)点云的格式
  16. 实体识别入门代码实战
  17. 我们计划招收300位数据分析爱好者,免费攻读R语言数据分析
  18. Docker安装到使用
  19. 测电源的纹波电压纹波系数
  20. 科技云报道:“吞金兽”ChatGPT背后:AI算力告急!

热门文章

  1. Simpleperf介绍
  2. 这两种完全不同的JPEG加载方式,你肯定见过!
  3. TCP/IP协议栈到底是内核态好还是用户态好?
  4. JAVA通信编程(四)——UDP通讯
  5. 开启云原生 MOSN 新篇章 — 融合 Envoy 和 Golang 生态
  6. 【城市沙龙】LiveVideoStack Meet|合肥:在“霸都”邂逅音视频技术
  7. 高品质互动在线课堂:前端开发优化实践
  8. 大牛书单 | 春节特辑
  9. 贺TDSQL喜提286万QPS!本文回顾了它的十年锻造之路
  10. Ansible中文权威指南