32 C++字符串
需要pointer和array的前置知识,因为你会发现字符串和数组关系是很紧密的。 首先,字符串是什么?本质上来说字符串就是一组characters字符,字符是指字母,数字和符号这些东西,本质上就是文本,对我们来说当然会需要用某种方式把文本的形状和格式在电脑上表示出来。
单一字符、整个段落、一个单词、一堆单词......所有这些被称为字符串,string of text(文本字符串)
C++中有一种数字类型叫char,它是character的缩写,占用 1 个字节内存。它很有用,因为能把指针转换为 char 类型指针,让你根据字节进行指针运算。它对分配内存缓冲区也很有用,如果你想分配 1k 的内存,你分配 1024 个 char 就行了。 它对字符串和文本也很有用,因为 C++默认处理的字符方式就是ASCII(aski)字符. 字符也可以是大于一个字节的(比如中文、日文),可以有 2-4 个字节的字符。
如果我们只用 1 字节来表示字符,1 字节=8bit,这意味着我们有\(2^8=256\) 种可能,显然数量不够,没法适配所有语言。 所以我们有了utf-16,也就是 16 位的字符编码,这意味着我们有\(2^{16}=65536\) 种可能.
但是在 C++基础语言中不适用任何库只是原始数据类型的话,char就是 1 字节。
1. const* char
经验法则:如果你不用new关键字,那就不要用delete
C++11 开始,将字符串常量直接赋值给非const
的char*
指针被视为不安全的行为。
故用
图中给的00
字符被称为the null termination character(空终止符),这样我们就知道字符串在哪里结束,也便于知道字符串大小 ^26e746
分配了array guard,但是没有空终止符,所以 cout 不知道打印到哪里结束
正常输出
2. std::string
std::string 有个接受参数为 char 指针或者 const char 指针的构造函数 还有很多内置方法
std::string name = "Cherno";
std::cout << name << std::endl; // Cherno
std::cout << name.size() << std::endl; // 6
字符串拼接
上面提到了它们是 const char 数组,不是真正的 string
或者