【C++】STL 容器 - string 字符串操作 ③ ( string 字符串 与 char* 字符串转换 | string#c

【C++】STL 容器 - string 字符串操作 ③ ( string 字符串 与 char* 字符串转换 | string#c

文章目录

一、string 字符串 与 char* 字符串转换1、string 与 char* 转换2、string 转为 char* - c_str() 成员函数3、string 转为 char* - copy() 成员函数3、char* 转为 string4、代码示例 - char* 与 string 互相转换一、string 字符串 与 char* 字符串转换1、string 与 char* 转换string 字符串类 中 封装了 char* 字符指针 ;

string 字符串 转为 char* 字符串 , 就是将 封装的 char* 字符指针取出来 ;char* 字符串 转为 string 字符串 , 就是 基于 char* 字符串 创建一个 string 字符串 ;2、string 转为 char* - c_str() 成员函数在 C++ 语言中的 std::string 类中 , 封装了一个 c_str() 成员函数 , 用于返回一个指向字符串内容的常量字符指针 ;

将 string 转为 char* 类型 , 就需要调用 c_str() 成员函数 ;

c_str() 函数的原型如下 :

代码语言:javascript代码运行次数:0运行复制const char* c_str() const;c_str() 函数 返回一个指向字符串内容的常量字符指针 , 该指针可以用于与C语言库函数进行交互 , 例如使用 printf() 函数打印字符串 ;

代码示例 :

代码语言:javascript代码运行次数:0运行复制 string s1 = "123456789";

// 将 string 转为 char*

const char* s2 = s1.c_str();

cout << "s2 : " << s2 << endl;3、string 转为 char* - copy() 成员函数std::string 类的 copy() 成员函数 , 原型如下 :

代码语言:javascript代码运行次数:0运行复制void copy(char* dest, size_t len, size_t pos = 0);这个函数的作用是将字符串中从 pos 位置开始的 len 个字符复制到目标字符数组 dest 中 ; 默认情况下 , pos 参数为 0 , 表示从字符串的开始位置复制 ;

代码示例 :

代码语言:javascript代码运行次数:0运行复制 string s1 = "123456789";

// 为 字符指针 分配内存

// 分配完内存后 使用 0 初始化

// 防止随机内容出现乱码导致字符串没有 '\0' 结尾

char buf[16] = {0};

// 将 s1 字符串 "123456789" 的

// 从 0 开始的 3 个字符 拷贝到 buf 中

s1.copy(buf, 3, 0);3、char* 转为 stringchar* 转为 string 字符串 , 只需要将 char* 字符串 传入 string 对象的 字符数组构造函数 即可 ;

string 类的 字符数组构造函数 接受一个指向字符数组的指针 s , 并将该数组的内容作为字符串来创建 ;

代码语言:javascript代码运行次数:0运行复制std::string(const char* s);代码示例 :

代码语言:javascript代码运行次数:0运行复制 // 将 char* 转为 string

string s3(s2);4、代码示例 - char* 与 string 互相转换代码示例 :

代码语言:javascript代码运行次数:0运行复制#include "iostream"

using namespace std;

#include "string"

int main() {

string s1 = "123456789";

// 将 string 转为 char*

const char* s2 = s1.c_str();

cout << "s2 : " << s2 << endl;

// 将 char* 转为 string

string s3(s2);

cout << "s3 : " << s3 << endl;

// 为 字符指针 分配内存

// 分配完内存后 使用 0 初始化

// 防止随机内容出现乱码导致字符串没有 '\0' 结尾

char buf[16] = {0};

// 将 s1 字符串 "123456789" 的

// 从 0 开始的 3 个字符 拷贝到 buf 中

s1.copy(buf, 3, 0);

cout << "buf : " << buf << endl;

// 控制台暂停 , 按任意键继续向后执行

system("pause");

return 0;

};执行结果 :

s2 : 123456789

s3 : 123456789

buf : 123

请按任意键继续. . .

相关推荐