【C++第十章】String

【C++第十章】学习String

STL介绍🧐

  学习string之前,我们要先了解一下STL库,STL是C++标准库的重要组成部分,不仅是一个可复用的组件库,也是一个包罗数据结构与算法的软件框架。STL有四个版本——原始版本、P.J.版本、RW版本、SGI版本,本文所学习的是SGI版本的STL。

  STL六大组件,分别为仿函数、算法、迭代器、空间配置器、容器、配接器,我们所学的string便是容器中的一种(不过严格来说string出现时间早于STL库,属于C++标准库)。

image-20240727232936197

认识String🧐

  string也是属于模板的一种,只不过被重命名了,那为什么要写成模板呢?这要从早期的编码说起。

image-20240727233617526

  由于早期的ASCII码不能很好解决各国语言存在的差异化,随后出现了Unicode(万国码)用于解决传统字符编码的局限性,并且万国码兼容ASCII码,以0开头的就是ASCII码,而常见的汉字基本为两个字节。Unicode是字符集,而Unicode中的UTF-8、UTF-16、UTF-32才是字符编码规则,我们用UTF-8就足够了,而其他语言可能要用UTF-16、UTF-32才能存下该字符。

Pasted image 20240723084849

  我们测试发现,前两个字节组成“你”,后两个字节组成“好”,在Windows下一般使用GBK编码,兼容更多的汉字,Linux下用UTF-8

Pasted image 20240723085250

  并且,在早期还出现过wchar_t宽字节去存储字符,后面为了规范还出了char16和char32去兼容UTF-16和UTF-32,它们所占用字节也不同。而我们发现输入一些生僻字时打印出来会变成乱码,这是因为计算机找不到对应的编码规则,比如编译器中仅存了ASCII的编码规则,我们输入中文进去自然无法识别。

Pasted image 20240723090554

  所以string写成模板是为了去兼容各种字符类型,不管是传char16和char32都可以接收。

基本使用🧐

  在C语言中,我们创建字符串没办法按需申请和释放,但在C++中string支持各种运算符重载,如下代码,字符串能够自动扩容,自动追加,为我们节省了不少时间。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A.A呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值