文章目录
- 一、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
对象 ;
std::string();
- 拷贝构造函数 : 接受一个已存在的 std::string 对象 other,并将它拷贝到新创建的 std::string 对象中 ;
std::string(const std::string& other);
- 字符数组构造函数 : 接受一个指向字符数组的指针 s , 并将该数组的内容作为字符串来创建 ;
std::string(const char* s);
- 字符数组子串构造函数 : 该构造函数接受一个指向无符号字符数组的指针 s 和一个大小 n,将字符数组的前 n 个字符作为字符串来创建
std::string(const char* s, size_t n);
- 字符串拼接构造函数 : 接受两个已存在的
std::string
对象 a 和 b , 并将它们拼接起来创建一个新的std::string
对象 ; 使用 运算符将它们拼接起来 ;
std::string(const std::string& a, const std::string& b);
- 初始化列表构造函数 : 使用 n 个 c 字符初始化 字符串 ;
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 . . .