前言
字符串顾名思义,就是一串字符,常用于保存和处理文本,比如用户输入、日志和界面上显示的信息。
几乎每种主流编程语言都有处理字符串的方式,比如我们常见的 C 语言。
实现
对于连续存储的变长字符串,主要有两种组织方式。
显式记录长度
struct string {
char *buffer;
size_t len;
};
可以看到字符存放于 buffer 缓冲区中,同时用 len 表示这一个字符串的长度。
以空字符结尾
// 以结束符结尾
char *string;
这种组织方式只有一个 buffer,没有长度字段,一般强行规定字符串要以某个特定的结束符结尾。
如果要获取长度,就需要从头到尾扫描,记录结束符前面有几个字符。
结语
熟悉 C 语言的读者肯定发现了,C 语言的标准字符串正是采用了第二种。
这是因为 ANSI C 标准化发生在 20 世纪 80 年代,而以 ‘\0’ 结尾的字符串早已广泛存在于各种主流库中。而且当时的设计理念也和现在不同,当时认为只用指针管理更加简洁,还可以少传递一个长度参数等。
不过当今大多数语言都使用了第一种方式来组织字符串。我认识的大多数人自己造轮子时也更喜欢处理这种字符串。