女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

机器人收到暗号 CAT。它看到的不只是一个词,也是一串有顺序的字符。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 下标 0C
  2. 下标 1A
  3. 下标 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。