Skip to content

string容器

要在 C++ 程序中使用 <string> 库,首先需要包含这个头文件:

c++
#include <iostream>
#include <string>

在有些编译器中,(如旧版 GCC/MSVC)可能在其 <iostream> 实现中间接包含 <string>

c++
#include <iostream>

int main(){
    std::string> str="h";
}

1.构造与赋值

1.1 string的构造

c++
// 1.无参构造,创建一个空字符串
string str=string();   // 相当于  string str;

// 2.初始化一个字符串
string str2=string("你好");  // 相当于 string str("你好");

// 3.通过一个字符数组,构造一个字符串
const char* array = "hello";
string str3 = string(str2);

// 4.通过指定数量的字符,构造出一个字符串
string str4 = string(5, 'A');    //创建5个连续的A,即AAAAA

1.2 string的赋值

1.2.1 string的等号重载

c++
string& operator=(const char* s);//char*类型字符串赋值给当前的字符串
string& operator=(const string& s);//把字符串s赋给当前的字符串
string& operator=(char c);//字符赋值给当前的字符串

例如

c++
// 1.通过字符数组直接赋值
const char* array = "hello";
string str1 = arr;

// 2.字符串直接赋值
string str = "你好";

// 3.通过字符进行赋值
string str2 = 'a';

1.2.2 assign()函数赋值

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& assign(const string& s,int start,int );	//将s从start开始n个字符赋值给字符串

例子

c++
// 1.通过assign函数赋值,相当于等号赋值
string str3;
str3.assign("你好");

// 2.assign可传入字符数组
const char* array1 = "hello";
string str4;
str4.assign(array1);

// 3.assign创建指定数量字符
string str5;
str5.assign(8, 'A');

// 4.把字符串s的前n个字符赋给当前的字符串
const char* array3 = "hello";
string str6;
str6.assign(array1, 3);

// 5.将s从start开始n个字符赋值给字符串 assign(const string &s,int start,int n)
string str7;
str7.assign('123456',3 ,2);   // 从第三个位置截取两个字符,赋值给str8

2.string的存取字符操作

2.1 string的[]运算符重载

c++
char& operator[](int n);

string[]运算符重载可以让字符串像数组一样存取字符

c++
#include <iostream>
using namespace std;

int main() {
	string str = "123456";
	cout << str[1] << endl; // 2


	char& c = str[1];
	c = 'a';
	cout << str << endl; // 1a3456

	return 0;
}

2.2 at()函数

c++
char& at(int n);

[]运算符使用类似

c++
#include <iostream>
using namespace std;

int main() {
	string str = "123456";
	cout << str.at(1) << endl; // 2


	char& c = str.at(1);
	c = 'a';
	cout << str << endl; // 1a3456

	return 0;
}

3.字符串拼接

3.1 string的+运算符重载

c++
string& operator+=(const string& str);		// 拼接字符串
string& operator+=(const char* str);		// 拼接字符数组
string& operator+=(const char c);			// 拼接字符

3.2 string的append()函数

c++
string& append(const char* s);		//把字符串s连接到当前字符串结尾
string& append(const char *s,int n);//把字符串s的前n个字符连接到当前字符串结尾
string& append(const string& s);	//同operator+=()
string& append(const string& s,int posint n);//把字符串s中从pos开始的n个字符连接到当前字符串结尾
string& append(int n, char c);		//在当前字符串结尾添加n个字符c

4.string的查找和替换

4.1 string的fing()函数

c++
int find(const string& str,int pos = O) const;	// 查找str第一次出现位置,从pos开始查找
int find(const char* s,int pos = o) const;		// 查找s第一次出现位置,从pos开始查找
int find(const char* s,int pos,int n) const;	// 从pos位置查找s的前n个字符第一次位置
int find(const char c,int pos = O) const;		// 查找字符c第一次出现位置

4.2 string的rfind()函数

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最后一次出现位置

4.3 string的replace()函数

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

5.string的比较

两个string的字符串相互比较,会依次比较字符串中的每一个字符的字符集代码,若字符相同,继续比较下一个,直到某一次的比较可以分出大小

c++
string str1='abc';
string str2='abe';

cout << (str1 > str2) << endl;   // 1  ,因为c>e

字符串的比较,仍然可以使用><>=<===!=来比较。但是这些比较符号有一定的局限性。

因为比较的结果是bool类型,只有0和1,无法表达两个字符串相等

5.1 string的compare()函数

c++
int compare(const string& s)

返回值有三种类型

  • 1:前面的大于后面的
  • -1:后面的大于前面的
  • 0:两字符串相等
c++
string str1='abc';
string str2='abe';

cout << str1.compare(str2) << endl;   // 1

6.string字串的获取

c++
string substr(int pos = 0,int n = npos) const  // 返回由pos开始的n个字符组成的字符串,npos默认值是字符串的长度

7.string的插入和删除

7.1 string的insert()函数

c++
string& insert(int pos,const char* s);		// 在pos位置插入字符串数组
string& insert(int pos,const string& str);	// 在pos位置插入字符串
string& insert(int pos,int n,char c);		// 在pos位置插入n个字符c

7.1 string的erase()函数

c++
string& erase(int pos,int n = npos);		//删除从Pos开始的n个字符

8.字符串风格转换

通过c_str()函数将stringchar*

c++
string str="abcd";
const char* cstr=str.c_str()

通过string构造函数把char*string

c++
const char* s="abcd";
string str= string(s);

// 或者简写
string str(s);

MIT Licensed