【C++】STL 容器 - string 字符串操作 ① ( string 字符串 简介 | string 字符串 与 char* 字符串 对比 | string 构造函数 )

2023-12-18 12:49:04 浏览数 (1)

文章目录

  • 一、string 字符串 简介
    • 1、string 字符串 与 char* 字符串 对比
    • 2、string 构造函数
    • 3、代码示例 - string 构造函数

一、string 字符串 简介


1、string 字符串 与 char* 字符串 对比

C 语言 的 标准模板库 ( STL , Standard Template Library ) 中的 std::string 是一个类 , 该类封装了 字符串 的数据和操作 ;

std::string 类 的本质 是一个动态大小的字符串 , 可以包含任何字符 , 包括字母 / 数字 / 标点符号等 ;

使用 string 类字符串 , 需要导入 string 头文件 :

代码语言:javascript复制
#include "iostream"
using namespace std;
#include "string"

在 C 中 , string 和 char* 都可以表示字符串 , 其有如下区别 :

  • 类型区别 : string 是一个类 , char* 是一个指向字符的指针类型 ;
  • 包含关系 : string 类 中封装了 char* 数据 , 负责管理 字符串 , 是 char* 数据的容器 ;
  • 操作区别 :
    • char* 字符串操作 , 需要使用 string.h 头文件中的一系列字符串操作函数 ;
    • string 类 中自身就封装了一系列字符串操作 , 如 查找 find 函数 , 删除 erase 函数 , ;
  • 越界问题 :
    • char* 字符串 需要提前指定大小 , 在 栈内存 / 堆内存 中分配空间 , 字符串大小不得超出边界 ;
    • string 字符串 不需要考虑 内存申请 和 内存释放 操作 , 也不需要考虑 越界 问题 ;

C 语言中 , 只能使用 char* 字符串 ;

2、string 构造函数

string 构造函数 :

  • 无参构造函数 : 创建一个空的 std::string 对象 ;
代码语言:javascript复制
std::string();
  • 拷贝构造函数 : 接受一个已存在的 std::string 对象 other,并将它拷贝到新创建的 std::string 对象中 ;
代码语言:javascript复制
std::string(const std::string& other);
  • 字符数组构造函数 : 接受一个指向字符数组的指针 s , 并将该数组的内容作为字符串来创建 ;
代码语言:javascript复制
std::string(const char* s);
  • 字符数组子串构造函数 : 该构造函数接受一个指向无符号字符数组的指针 s 和一个大小 n,将字符数组的前 n 个字符作为字符串来创建
代码语言:javascript复制
std::string(const char* s, size_t n);
  • 字符串拼接构造函数 : 接受两个已存在的 std::string 对象 a 和 b , 并将它们拼接起来创建一个新的 std::string 对象 ; 使用 运算符将它们拼接起来 ;
代码语言:javascript复制
std::string(const std::string& a, const std::string& b);
  • 初始化列表构造函数 : 使用 n 个 c 字符初始化 字符串 ;
代码语言:javascript复制
string(int n,char c);

3、代码示例 - string 构造函数

代码示例 :

代码语言:javascript复制
#include "iostream"
using namespace std;
#include "string"

int main() {

	// 直接使用字符串常量初始化
	string s1 = "Hello World!";

	// 字符数组构造函数
	string s2("Tom and Jerry");

	// 拷贝构造函数
	string s3 = s2;

	// 使用 3 个 a 字符 组成的字符串
	string s4(3, 'a');

	// 拼接构造函数
	string s5 = s1   s2;

	cout << "s1 : " << s1 << endl;
	cout << "s2 : " << s2 << endl;
	cout << "s3 : " << s3 << endl;
	cout << "s4 : " << s4 << endl;
	cout << "s5 : " << s5 << endl;
	

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

s1 : Hello World! s2 : Tom and Jerry s3 : Tom and Jerry s4 : aaa s5 : Hello World!Tom and Jerry Press any key to continue . . .

0 人点赞