C++字符串完全指南:C风格字符串 vs std::string 类
C++提供两种字符串表示:
- C风格字符串:源自C语言,继承支持。
- string类:标准C++引入,功能更强大、安全。
C风格字符串
本质是以空字符\0结尾的单维字符数组。字符串内容后跟一个\0,故数组长度比字符数多1。定义初始化:
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
利用数组初始化规则可简写:
char greeting[] = "Hello"; // 编译器自动在末尾添加\0
内存布局:
打印示例:
#include <iostream>
using namespace std;
int main() {
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
cout << "Greeting message: " << greeting << endl;
return 0;
}
输出:Greeting message: Hello
常用C字符串函数(需<cstring>)
| 序号 | 函数与功能 |
|---|---|
| 1 |
复制s2到s1。 |
| 2 |
将s2追加到s1末尾。 |
| 3 |
返回s1长度(不含\0)。 |
| 4 |
比较:相等返回0,s1<s2返回负,s1>s2返回正。 |
| 5 |
返回s1中首次出现ch的指针。 |
| 6 |
返回s1中首次出现s2的指针。 |
综合演示:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str1[10] = "Hello";
char str2[10] = "World";
char str3[10];
int len;
strcpy(str3, str1);
cout << "strcpy(str3, str1) : " << str3 << endl;
strcat(str1, str2);
cout << "strcat(str1, str2) : " << str1 << endl;
len = strlen(str1);
cout << "strlen(str1) : " << len << endl;
return 0;
}
输出:strcpy: Hello、strcat: HelloWorld、strlen: 10
C++ string类
标准库<string>提供string类,涵盖上述所有操作且更安全、功能更丰富。示例:
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "Hello";
string str2 = "World";
string str3;
int len;
str3 = str1; // 赋值拷贝
cout << "str3 : " << str3 << endl;
str3 = str1 + str2; // 运算符重载拼接
cout << "str1 + str2 : " << str3 << endl;
len = str3.size(); // 成员函数获取长度
cout << "str3.size() : " << len << endl;
return 0;
}
输出:str3: Hello、str1+str2: HelloWorld、size: 10
推荐:现代C++优先使用std::string,避免缓冲区溢出、内存管理等C风格字符串痛点。
C语言
- 掌握 C# 字符串:基础、操作与进阶技巧完全指南
- 掌握 C++ 运算符:六大类型全解析与实战示例
- C++ 注释最佳实践:编写可读、可维护代码的注释艺术
- C++ 类模板实战指南:编写灵活的类型无关代码
- C++ 变量与数据类型全解析:int、double、char、string、bool 详细指南
- C++ 字符串函数实战:strcpy、strcat、strlen、strcmp 详解与示例
- C 语言字符串完全指南:声明、输入输出与库函数详解
- C++编程语言:核心特性全景解析
- C++常量与字面量完全手册:类型、语法与最佳实践
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 枚举字符串表示:默认行为、toString 重写与进阶模式
- Java Strings 类:掌握字符串创建与操作