0%

c++字符串函数的整理

前言

我在编写程序时经常需要进行一些有关字符串的处理,而我目前并不能完全记住大部分的字符串函数,所以我新建了这一篇文章,用于整理这些函数。


关于c++ string

  • string是c++内置的一个类,可以很好的代替c风格字符串和字符指针;

string的初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<iostream>
#include<string>
using namespace std;
int main() {
string str1; //生成空白字符串""
string str2("this is a string"); //str2 = "this is a string"
string str3(str2); //生成str2副本
string str4 = str3; //将str3赋值给str4
string str5(10, 'A');
string str6 = "is this a string?";
string str7 = string(10, 'B');

string str8("abcdefg", 3); //将字符串的前3个字符赋给str7

string str9(str6, 3, 4); //将str5从下标3开始的4个字符赋给str8
cout << str1 << endl
<< str2 << endl
<< str3 << endl
<< str4 << endl
<< str5 << endl
<< str6 << endl
<< str7 << endl
<< str8 << endl
<< str9 << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
输出结果:

this is a string
this is a string
this is a string
AAAAAAAAAA
is this a string?
BBBBBBBBBB
abc
this

--------------------------------

string读入

1
2
3
string str;
cin >> str; //以空格, 制表符, 回车符作为结束标志
getline(cin, s); //以回车符作为结束标志

string长度

1
2
3
int len = str.size();
int len = str.length();
//等价

string查找

1
2
3
4
5
string str = "This is a long string, and maybe you can find something here.";
string sub1 = "something";
string sub2 = "anything";
int pos1 = str.find(sub1);
int pos2 = str.find(sub2);
1
2
pos1 = 46;
pos2 = -1;

迭代器

1
2
3
4
5
6
7
8
9
string str = "a simple test";
for(auto it = str.begin(); it != str.end(); ++it) cout << *it;
cout << endl;

for(auto it = str.rbegin(); it != str.rend(); ++it) cout << *it;
cout << endl;

for(auto it : s) cout << it;
cout << endl;
1
2
3
a simple test
tset elpmis a
a simple test

empty()

检查字符串是否为空

clear()

清空字符串

insert(index, count, ch)

在index处插入count个字符ch

获取字符串子串

1
2
3
4
5
string s = "this is a test";
string s1 = s.substr(0, 4);
string s2 = s.substr(10, string::npos);

cout << s1 << endl << s2;

删除元素

1
2
3
erase(pos, n);      //删除从pos开始的n个字符,比如erase(0, 1)就是删除第一个字符
erase(position); //删除从position处的一个字符(position是个string类型的迭代器)
erase(first, last); //删除从first到last之间的字符(first和last都是迭代器)

字符串的 ‘+’ 和 ‘+=’

1
2
3
4
5
6
7
string s1 = "first ";
string s2 = "second ";
string s3 = s1 + s2;
cout << s3 << endl;
string s4 = "third ";
s3 += s4;
cout << s3 << endl;
1
2
first second
first second third

后记

上述为我目前已经整理的字符串函数。也许我并没有完整的整理所有的内置字符串函数或字符串的一些用法, 但如果我在学习或编写代码时发现我不曾整理的函数,我会尽快将其整理。

我从初二那年就断断续续地在洛谷等oj上刷题, 但即使我可以完成难度相对更高的题,我往往会在一道很简单的字符串题目面前被难倒,更别提在难题中掺杂着有关字符串处理的题目了。但我发现有时我绞尽脑汁实现的一些功能,往往对应这更优时间复杂度的内置字符串函数。

所以我下定决心花费一定时间整理这类函数, 希望能够提升自己, 也希望我的文章有帮到你。

我很可爱,请给我钱qwq