
简介
区别于#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泛滥,我已瘫痪!
*/
如果哪里有困惑,欢迎给笔者留言。
如果这篇博文对你产生了帮助,可以留下小小的一个赞哦,大家的支持是我更新的最大动力~