1.字符串字面量 2.C 风格字符串(基于字符数组的字符串) 3.C++ 标准库 string 类 4.字符串字面量与 std::string 的转换 1.字符串字面量 字符串字面量是C++ 中最基础的字符串形式, 你可以把它理解为直接用双引号"" 包裹的字符序列 比如"hello" 、"C++ string" 都属于字符串字面量1 ) . 核心特性 a. 本质 字符串字面量在内存中是以const char [ ] ( 常量字符数组) 的形式存储的, 并且自动在末尾添加\0 ( 空字符) 作为结束标志 b. 只读属性 字符串字面量存储在程序的只读内存区域, 不能修改, 强行修改会导致程序崩溃 c. 转义字符 支持转义字符( 如\n换行、\t制表符、\"表示双引号本身) 2 ) . 代码示例#include <iostream> using namespace std ; int main ( ) { // 基础的字符串字面量 const char * str_literal= "Hello, C++!" ; // 推荐用const修饰,明确只读属性 cout<< str_literal<< endl; // 输出:Hello, C++! // 转义字符的使用 const char * escape_str= "Line1\nLine2\tTab\"Quote\"" ; cout<< escape_str<< endl; /* 输出: Line1 Line2 Tab"Quote" */ // 错误示例:试图修改字符串字面量(会导致程序崩溃) // str_literal[0] = 'h'; // 编译可能警告,运行时崩溃 // 字符串字面量可以拼接(多个双引号包裹的序列会自动合并) const char * concat_str= "Hello" " " "World" ; cout<< concat_str<< endl; // 输出:Hello World return 0 ; } 2.C 风格字符串(基于字符数组的字符串) C风格字符串是从C语言继承来的, 本质是以\0 结尾的char 类型数组, 但可以修改, 因为存储在"可写内存区" 1 ) . 声明与初始化"必须保证数组末尾有\0, 否则无法被正确识别为字符串" ( 会出现乱码) #include <iostream> #include <cstring> // 必须包含该头文件,使用C风格字符串的操作函数 using namespace std ; int main ( ) { // 方式1:直接初始化(自动添加'\0') char c_str1[ ] = "Hello" ; // 数组长度为6(5个字符 + '\0') cout<< "长度:" << strlen ( c_str1) << endl; // 输出:5(strlen只算有效字符,不含'\0') cout<< "数组大小:" << sizeof ( c_str1 ) << endl; // 输出:6(包含'\0') // 方式2:手动初始化(必须显式加'\0') char c_str2[ 6 ] = { 'H' , 'e' , 'l' , 'l' , 'o' , '\0' } ; cout<< c_str2<< endl; // 输出:Hello // 错误示例:缺少'\0',输出乱码 char c_str3[ 5 ] = { 'H' , 'e' , 'l' , 'l' , 'o' } ; cout<< c_str3<< endl; // 输出:Hello + 随机乱码(直到找到内存中的'\0') return 0 ; } 2 ) . C风格字符串的常用操作( 依赖< cstring> 库)
3.C++ 标准库 string 类 C++ 推荐使用的字符串类型, 封装了字符数组的底层细节, 更安全、易用、支持动态长度, 需要包含头文件< string > 1 ) . 核心优势 a. 自动管理内存, 无需手动处理\0 和数组长度 b. 支持运算符重载( + 拼接、= 赋值、== 比较、[ ] 访问字符等) c. 提供丰富的成员函数( 获取长度、查找、替换、清空等) 2 ) . 声明和常用操作#include <iostream> #include <string> // 必须包含该头文件 using namespace std ; int main ( ) { // 初始化方式 string s1= "Hello" ; // 直接赋值 string s2 ( "World" ) ; // 构造函数初始化 string s3= s1+ " " + s2; // 拼接(支持+运算符) cout<< s3<< endl; // 输出:Hello World // 常用成员函数 cout<< "字符串长度:" << s3. size ( ) << endl; // 输出:11(等价于length()) cout<< "第一个字符:" << s3[ 0 ] << endl; // 输出:H(支持[]访问) cout<< "查找子串:" << s3. find ( "World" ) << endl; // 输出:6(返回子串起始下标) // 修改字符串 s3. replace ( 0 , 5 , "Hi" ) ; // 从下标0开始,替换5个字符为"Hi" cout<< "替换后:" << s3<< endl; // 输出:Hi World // 清空字符串 s3. clear ( ) ; cout<< "清空后是否为空:" << s3. empty ( ) << endl; // 输出:1(true) return 0 ; } 4.字符串字面量与 std::string 的转换 a. 字符串字面量转换为std:: string , 直接赋值即可 b. std:: string 转换为字符串字面量, 用c_str ( ) #include <iostream> #include <string> using namespace std ; int main ( ) { // 1. 字符串字面量 → std::string(直接赋值即可) const char * c_str= "Hello" ; string s= c_str; cout<< s<< endl; // 输出:Hello // 2. std::string → 字符串字面量(用c_str()) string s2= "World" ; const char * c_str2= s2. c_str ( ) ; // 必须用const char*接收 cout<< c_str2<< endl; // 输出:World return 0 ; }