string容器
概念
本质:类
和char* 的区别:string内部有个char*,并且封装了很多方法
迭代器类型:随机迭代器(可用于标准算法、支持[]访问、-n、比较大小)
常用方法
构造
方法 | 作用 |
---|
string(); | 创建一个空字符串,如string str; |
string(const char* s) | 使用字符串s初始化 |
string(const string& str) | 使用一个string对象初始化另一个string对象 |
string(int n ,char c) | 使用n个字符c初始化 |

string str;
const char* ch = "hello";
string str2(ch);
cout << "str2 = " << str2 << endl;
string str3(str2);
cout << "str3 = " << str3 << endl;
string str4(5,'a');
cout << "str4 = " << str4 << endl;
赋值
方法 | 作用 |
---|
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& operator=(const char* s) char*类型字符串赋值给当前字符串
string str1;
str1 = "hello";
cout << "str1 = " << str1 << endl;
//string& operator=(char c) 字符赋值给当前字符串
string str2;
str2 = 'c';
cout << "str2 = " << str2 << endl;
//string& operator=(const string &s) 把字符串s赋值给当前的字符串
string str3;
str3 = str2;
cout << "str3 = " << str3 << endl;
//string& assign(const char *s) 把字符串s赋值给当前的字符串
string str4;
str4.assign("hello");
cout << "str4 = " << str4 << endl;
//string& assign(const char *s, int n) 把字符串s的前n个字符赋值给当前的字符串
string str5;
str5.assign("hello world",8);
cout << "str5 = " << str5 << endl;
//string& assign(const string &s) 把字符串s赋值给当前的字符串
string str6;
str6.assign(str5);
cout << "str6 = " << str6 << endl;
//string& assign(int n, char c) 用n个字符c赋值给当前的字符串
string str7;
str7.assign(5,'a');
cout << "str7 = " << str7 << endl;
拼接
方法 | 作用 |
---|
string& operator+=(const char* str) | 重载操作符 += |
string& operator+=(const string &str) | 重载操作符 += |
string& operator+=(char c) | 重载操作符 += |
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& operator+=(const char* str) 重载操作符 +=
string str1;
str1 += "hello";
cout << "str1 = " << str1 << endl;
//string & operator+=(const string &str) 重载操作符 +=
string str2;
str2 += str1;
cout << "str2 = " << str2 << endl;
//string & operator+=(char c) 重载操作符 +=
string str3;
str3 += 'x';
cout << "str3 = " << str3 << endl;
//string & append(const char *s) 把字符串s追加到字符串结尾
string str4;
str4.append("hello");
cout << "str4 = " << str4 << endl;
//string& append(const char *s, int n) 把字符串s的前n个字符追加到字符串结尾
string str5;
str5.append("hello world",8);
cout << "str5 = " << str5 << endl;
//string& append(const string &s) 同operator += (const string &str)
string str6;
str6.append(str5);
cout << "str6 = " << str6 << endl;
//string& append(const string &s, int pos, int n) 字符串s中从pos开始的n个字符追加到字符串结尾
string str7;
str7.append(str6,0,5);
cout << "str7 = " << str7 << endl;
截取
方法 | 作用 |
---|
string substr( int pos = 0 , int n = npos ) const | 返回由pos开始的n个字符组成的字符串 |

string str("0123456789@qq.com");
string PersonQQ = str.substr(0,str.find('@'));
string Flag = str.substr(str.find('@') + 1, str.size());
cout << "PersonQQ = " << PersonQQ << endl;
cout << "Flag = " << Flag << endl;
插入、删除
方法 | 作用 |
---|
string& insert(int pos,const char* s); | pos处插入字符 |
string& insert(int pos,const string& str); | pos处插入字符串 |
string& insert(int pos,int n,char c); | 在指定位置插入n个字符c |
string& erase(int pos, int n = npos); | 删除从Pos开始的n个字符 |

string str("0123456");
//string& insert(int pos, const char* s); 插入字符串
str.insert(6, "7");
cout << "str " << str << endl;
//string& insert(int pos, int n, char c); 在指定位置插入n个字符c
str.insert(8, 3,'a');
cout << "str " << str << endl;
//string& erase(int pos, int n = npos); 删除从Pos开始的n个字符
str.erase(9, 2);
cout << "str " << str << endl;
替换、查找
记法:find是从左到右的查找,而rfind是从右到左的查找
方法 | 作用 |
---|
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 str("01234567890");
//int find(const string& str, int poS = 0)const;查找str第一次出现位置, 从pos开始查找
string str1 = "9";
int index1 = str.find(str1, 0);
cout << " find : index1 = " << index1 << endl;
int index11 = str.find(str1, 0);
cout << "rfind : index1 = " << index11 << endl;
//int find(const char* s, int pos = 0)const;查找s第一次出现位置, 从pos开始查找
int index2 = str.find("9", 5);
cout << " find : index2 = " << index2 << endl;
int index22 = str.find(str1, 0);
cout << "rfind : index2 = " << index22 << endl;
//int find(const char* s, int pos, int n) const;从pos位置 查找 s的前n个字符 第一次位置
int index3 = str.find("6789", 2, 1);
cout << " find : index3 = " << index3 << endl;
int index33 = str.rfind("6789", 9, 1);
cout << "rfind : index3 = " << index33 << endl;
//int find(const char c, int pos = 0)const; 查找字符c第一次出现位置
int index4 = str.find('8', 0);
cout << " find : index4 = " << index4 << endl;
int index44 = str.rfind('8',9);
cout << "rfind : index4 = " << index44 << endl;
比较
原理 : 转成ASCII码进行比较的
方法 | 作用 |
---|
int compare(const string &s) const; | 比较字符串 |
返回值:
函数
方法 | 作用 |
---|
bool operator==(const char* str) | 重载操作符 += |
bool operator==(const string &str) | 重载操作符 += |

存取读写
注意:【】和at
方法建议使用在数据的读取上而非存储!
方法 | 作用 |
---|
char& operator[](int n); | 通过[]方式存储 |
char& at(int n) | 通过at方法获取字符 |

string str1("hello");
for (int i = 0; i < str1.size(); i++)
{
cout << str1[i] << " ";
}
cout << endl;
for (int i = 0; i < str1.size(); i++)
{
cout << str1.at(i) << " ";
}
cout << endl;
str1[1] = 'w';
str1.at(2) = 'h';
cout << "str1 = " << str1 << endl;