string所有函数详解——史上最全,最贴心


简介

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


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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来老铁干了这碗代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值