STL专题-string

本文最后更新于:2021年3月3日 下午

STL容器string,以及stringstream的用法。

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
string(); //创建一个空的字符串 例如: string str;
string(const char* s); //使用字符串s初始化
string(const string& str); //使用一个string对象初始化另一个string对象
string(int n, char c); //使用n个字符c初始化

/********string赋值*******/

string& operator=(const char* s); //char*类型字符串 赋值给当前的字符串
string& operator=(const string &s); //把字符串s赋给当前的字符串
string& operator=(char c); //字符赋值给当前的字符串
string& assign(const char *s); //把字符串s赋给当前的字符串
string& assign(const char *s, int n); //把字符串s的前n个字符赋给当前的字符串
string& assign(const string &s); //把字符串s赋给当前字符串
string& assign(int n, char c); //用n个字符c赋给当前字符串


/********string拼接*******/
string& operator+=(const char* str); //重载+=操作符
string& operator+=(const char c); //重载+=操作符
string& operator+=(const string& str); //重载+=操作符
string& append(const char *s); //把字符串s连接到当前字符串结尾
string& append(const char *s, int n); //把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s); //同operator+=(const string& str)
string& append(const string &s, int pos, int n);//字符串s中从pos开始的n个字符连接到字符串结尾

/********string查找和替换*******/
int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找
int find(const char* s, int pos = 0) const; //查找s第一次出现位置,从pos开始查找
int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置
int find(const char c, int pos = 0) const; //查找字符c第一次出现位置
int rfind(const string& str, int pos = npos) const; //查找str最后一次位置,从pos开始查找
int rfind(const char* s, int pos = npos) const; //查找s最后一次出现位置,从pos开始查找
int rfind(const char* s, int pos, int n) const; //从pos查找s的前n个字符最后一次位置
int rfind(const char c, int pos = 0) const; //查找字符c最后一次出现位置
string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str
string& replace(int pos, int n,const char* s); //替换从pos开始的n个字符为字符串s

/********string比较*******/
int compare(const string &s) const; //与字符串s比较
int compare(const char *s) const; //与字符串s比较

/********string存取*******/
//string中单个字符存取
char& operator[](int n); //通过[]方式取字符
char& at(int n); //通过at方法获取字符

/********string插入和删除*******/
string& insert(int pos, const char* s); //插入字符串
string& insert(int pos, const string& str); //插入字符串
string& insert(int pos, int n, char c); //在指定位置插入n个字符c
string& erase(int pos, int n = npos); //删除从Pos开始的n个字符,默认全删

/********string子串*******/
string substr(int pos = 0, int n = npos) const; //返回由pos开始的n个字符组成的字符串

字符串比较

  • 字符串比较是按字符的ASCII码进行对比
    • = 返回 0
    • >返回 1
    • < 返回 -1

string的查找 与 npos

1
2
3
4
5
6
7
8
9
10
11
//string
int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找
int find(const char* s, int pos = 0) const; //查找s第一次出现位置,从pos开始查找
int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置
int find(const char c, int pos = 0) const; //查找字符c第一次出现位置

int rfind(const char c, int pos = 0) const; //查找字符c最后一次出现位置

int find_first_of(str,int pos=0) const;//查找str第一次出现位置

int find_last_of(str,int pos=npos) const;//查找str最后一次出现位置,npos是一个很大的数
  • 额外注意的一点,find()找到了则返回第一次出现的位置,没找到则返回npos,我的电脑的这个数字显示:4294967295
  • 无论从哪里开始查找,返回的都是全局位置
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
27
28
29
30
31
32
33
34
int main() {

string s = "c123c4563c";

if (s.find('0',0) == s.npos) {
cout << "未找到字符 0" << endl;
}

int find_result = s.find('c', 2);
if (find_result != s.npos) {
cout << "找到字符,索引 " <<find_result<< endl;//4,即使从2号索引开始查找,返回的依旧是全局索引
}

//查找首次出现与最后一次出现
cout << "c 首次出现:" << s.find_first_of('c') << endl;//0
cout << "c 最后出现:" << s.find_last_of('c') << endl;//9,第二个参数默认值是npos
cout << "c 最后出现:" << s.find_last_of('c',0) << endl;//0,这样是从头开始找

//反向查找的使用:确定子串是否唯一
if (s.rfind("3c") != s.find("3c"))
cout << "3c 字符串不唯一" << endl;


//查找c出现的所有位置
int position = 0;
int i = 1;
while ((position = s.find('c', position)) != string::npos)//position记录位置
{
cout << "c的位置 " << i++ << " : " << position << endl;
position++;
}

return 0;
}

algorithm的find

1
find(iterator beg, iterator end, value);

返回值则是元素第一次出现迭代器,当未找是,返回end()。

string插入

1
2
3
4
5
6
7
string& insert(int pos, const char* s); //插入字符串
string& insert(int pos, const string& str); //插入字符串
string& insert(int pos, int n, char c); //在指定位置插入n个字符c

void pushback(char C);//向末尾插入字符,注意只能插字符

s[3] = 'c';//数组的方式改变值是可以的,即读写均可

stringstream

对应头文件#include <sstream>


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!