rust字符串、字符长度
Rust 中的字符是 Unicode 类型,因此每个字符占据 4 个字节内存空间,但是在字符串中不一样,字符串是 UTF-8 编码,也就是字符串中的字符所占的字节数是变化的(1 - 4),这样有助于大幅降低字符串所占用的内存空间。
这就导致了一个问题,对于字符串 ,rust是不支持索引的。举个例子
// c++中很常见的字符串定义与索引操作
#include <cstring>
string a = "helloworld";
printf("%c",a[1]);
但是rust中不允许这种索引
C++中这种索引是逐字节的,rust字符串中每一个字符长度不一样,所以字符串操作(增删改插)都是以单个字符为单位的。
比如说let s = String::from("中国人")
,每次操作一个汉字,每次操作的长度单位是3字节。但是因为可能字符串中UTF-8编码长度各不相同,干脆不要索引算了。
还有一个舍弃索引的原因。
因为rust支持的语言特别多,有些语言只有在字符串形式下有UTF-8编码,没有unicode编码。有时候单个字符没有意义,只有字符串有意义,所以就不要索引了。
但是我不得不吐槽,rust字符串做的这么麻烦真的是很让人头疼