String(一)———了解编码

目录

string类的介绍

编码

basic_string、u16string 、u32string 、wstring


string类的介绍

1. string类是表示字符序列的类

2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。

3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型

4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数

5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个 类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

从cplusplus文档上也可以查阅到string类的相关信息。

编码

string类是basic_string模板类的一个实例,为什么这里是basic_string<char>,这就涉及到编码了。

我们最早接触到的编码应该是ASCLL码了,它也称美国信息交换标准代码。

 为什么会存在ASCLL码呢?————我们知道计算机的世界只有0和1,没有字母,那么要将字母显示出来就只能将其转化为数字让计算机识别,因此有了ASCLL码。

因为英文单词由字母组成,所以要表达英文、数字、符号只需要128个数字符号即可。

但是世界上不只英文一种语言,还有汉语、日语.......因此为了让世界计算机科学联系在一起共同促进发展,产生了一种编码: Unicode(统一码,万国码)

Unicode 又有多种形式以适应不同语言:UTF-8UTF-16UTF-32

其中UTF-8使用最为广泛,因为它可以对不同范围的字符使用不同长度的编码,较为灵活;并且它可以兼容ASCLL码。

UTF-16一个字符以2字节一单位,UTF-32则是4字节一单位。

还有一种码GBK(称为国码)也就是我国编的编码,因为外国人对博大精深的中文理解毕竟不如国人,所以我们自己编了适合中文的编码GBK。

像中文就是一个汉字是两字节的,也就需要两个码位来表示。

 s1[0][1]是第一个字,[2][3]是第二个字。至于为什么编码为负,因为这和编码的开头有关系,它需要兼容ASCLL,如果是正的就无法区分是一个一个的ASCLL编码还是汉字编码了。

汉字编码也是有讲究的,将谐音字等放在了一起方便编码。

basic_string、u16string 、u32string 、wstring

上面说了UTF-8是使用最广泛的编码方式,basic_string就是基础这种编码方式:

 u16string是UTF-16

 

u32string是UTF-32

 wstring是c++98的,也是两个字节为一单位,与UTF-16类似

总之不同的编码方式对应不同的string,它们接口都差不多,学会一个其余的也都能掌握。

string类是basic_string模板类的一个实例,它是动态增长的字符数组,原型:

template <class T>
class basic_string
{
private:
	T* str;
	size_t capacity;
	size_t size;
};
typedef basic_string<char> string;

 为什么这里用T,因为不确定一个字符是多大,可能是一个字节,也可能是两个字节大小,对应不同的编码方式。所以这里也不知道字符串类型是什么,因此才说它是动态增长的字符数组。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值