
一起动脑筋 · 先看一个小故事
机器人收到暗号 CAT。它看到的不只是一个词,也是一串有顺序的字符。
把过程摊开来看
- 下标 0C
- 下标 1A
- 下标 2T
字符串表示字符序列。
在这个 ASCII 示例中,std::string 保存三个字节,可以按下标访问 C、A、T,也可以把更多文字接在后面。
01字符串就是“一段文字”吗?
入门时可以先这样理解:字符串是一串按顺序排列的字符数据。
std::string name = "Alice";
它保存了 A、l、i、c、e 这串内容。
02C++ 里常用哪种字符串?
现代 C++ 日常编程中经常使用:
#include <string>
std::string text = "Hello";
std::string 会帮助我们管理字符串长度和存储空间,比直接使用字符数组方便很多。
03字符串和 char 数组有什么关系?
C 风格字符串常使用以空字符 '\0' 结尾的字符数组:
char text[] = "Hello";
它实际包含:
Hello\0
std::string 则是一个标准库类,不应简单说成“就是 char 数组”。
04std::string 的 length 是什么?
std::string s = "Hello";
std::cout << s.size();
结果是 5。
对普通 ASCII 英文文本,一个 char 通常对应一个字节,因此看起来也像“5 个字符”。
05一个汉字算一个 char 吗?
在 UTF-8 编码下,通常不是。
std::string s = "你";
常见 UTF-8 环境中,s.size() 通常得到 3,因为这个汉字由 3 个 UTF-8 字节组成。
06字符串可以做哪些操作?
拼接
a + b
长度
s.size()
访问
s[i]
查找
s.find(...)
07空字符串是什么?
std::string s = "";
它是一个合法字符串,只是长度为 0。
“空字符串”和“没有创建 string 对象”不是一回事。
你已经知道了什么
- 字符串是一串有顺序的字符数据。
- 现代 C++ 常使用
std::string。 - C 风格字符串和
std::string不是同一个东西。 size()返回的是 char 单元数量 / 字节数量语义,不保证等于人眼看到的 Unicode 字符数。- UTF-8 中文通常会占多个 char 字节。
下一篇:怎样遍历和处理字符串?
轮到你来试一试
CAT 的 size 是 3,最后一个字符下标是多少?
想好了吗?点开看解释
2。长度是元素数量,最后下标比长度小 1。