当前位置: 首页 > news >正文

C++学习笔记 07 字符串

一、默认编码

ASCII

ASCII可以拓展为很多,比如UTF-8、UTF-16、 UTF-32 还有宽字符(wide string)
当然,字符其实是可以大于一个字节的,在其他语言中(日语、中文)有两个、三个、四个字节的字符。

二、大小

1字节 byte, 就是8bit,= 2^8 = 256 种字符。 如果把英文字母,数字、符号,日文、中文韩文等这些放在一起肯定多余256。这样8bit就不够用了,没有办法适配所有的语言。所以有了UTF-16,就是16位的字符编码,这意味着我们有2的16次方可能性,就是65536。还有其他编码。
但是在C++基础语言中,不使用任何库,只是原始数据类型的话,char是1字节。当你在C++中使用一个字符串,就是普通字符串,普通字符,而不是2字节的宽字符。
我们说的就是一个字节的字符,就是我们日常的英语;而如果使用其他 语言,比如俄语,那就没法使用这个(1个字节字符),你必须使用其他字符编码。

三、指针形式字符串 (字符串终止符:00)

空终止符:00, the null termination character, 这样我们就知道字符串在哪里结束。对于字符串指针变量,我们不知道其size,它是一个指针。那么我们怎么找出其大小呢?这就是能用到空终止符的地方了:字符串从指针的内存地址开始,直到0结束。

image

四、纯数组形式的字符串(内存守卫:cc)

char name2[6] = { 'C', 'h', 'e', 'r', 'n', 'o' };

纯数组形式的字符串打印问题

字符数组结束符,终止符

ASCII码值,0 是空

https://www.asciitable.com/asciifull.gif


五、字符串类string

字符串string类的相关操作

完整源码:

#include<iostream>
#include<string>using namespace std;int main() {//C++ 11 开始,字符串声明必须加上 const, 否则编译报错。//字符串不能被更改,你不能拓展一个字符串使其变长。因为这是一个固定分配的内存块。//如果你想要一个更长的字符串,那就要去分配一个全新的内存,并删除旧的字符串。//这个字符串不是在堆上分配的,所以不能用delete 或 delete[] 删除。//经验法则是:如果不用 new 关键字,那就不用 deleteconst char* name = "Cherno";//name[2] = 'b'; //因为被定义为const常量的,所以不能被修改。//这是一个数组,不是一个字符串,就是一个包含6个字符的数组。没有空指针结束符。char name2[6] = { 'C', 'h', 'e', 'r', 'n', 'o' };char name3[7] = { 'C', 'h', 'e', 'r', 'n', 'o', '\0'};char name4[7] = { 'C', 'h', 'e', 'r', 'n', 'o', 0};char name5[7] = { 'C', 'h', 'e', 'r', 'n', 'o', NULL};std::cout << name << std::endl;std::cout << name2 << std::endl;std::cout << name3 << std::endl;std::cout << name4 << std::endl;std::cout << name5 << std::endl;//当我们在debug模式下分配数组内存,C或C++标准库会 插入栈守卫之类的东西,这样我们就知道是不是在分配的内存之外了//1. 而 + 操作符不可以操作,这相当于把2个字符指针相加std::string name6 = "hello " + "world";//2. += 操作符在string中重载了,所以可以支持+=操作name6 += "world";//3. 创建一个字符串,再附加一个值给它。这样做会得到很多拷贝,但大多数情况下没问题。std::string name7 = std::string("hello ") + "world";//4. 不可以用newstring name7 = new string("hello ");//5. 判断字符串中是否包含某字符bool contains = name7.find("no") != string::npos;std::cout << name6 << std::endl;std::cin.get();
}

九、其他字符串类型数据

C++20 新特性:char8_t 的诞生与意义

#include<iostream>
#include<stdio.h>int main() {const char name1[8] = "Cherno";	const char name2[8] = "Che\0rno"; //终止符std::cout << strlen(name1) << std::endl;	//6std::cout << strlen(name2) << std::endl;	//3const char* name3 = "Cherno";			//ASCIIconst wchar_t* nameWide = L"Cherno";	//宽字符const char16_t* name16 = u"Cherno";		//Unicode 16const char32_t* name32 = U"Cherno";		//Unicode 32const char8_t* nameUtf8 = u8"Cherno";		//C++20引入 UTF-8//不允许追加,报错std::string nameStr = "hello " + "world";//正确方式std::string nameStr = std::string("hello ") + "world";//可追加的字符串 C++14 using namespace std::string_literals;//在后面加sstd::string nameStr = "hello "s + "world";//字符串追加std::wstring wideStringAppend= L"hello "s + L"world";std::u16string unicode16Str= u"hello "s + u"world";std::u32string unicode32Str= U"hello "s + U"world";//报错, Why?std::u8string utf8Str = u8"hello " + u8"world";//只读不可更改的,不可追加std::wstring_view wideStrView = L"hello ";std::u16string_view u16StrView = u"hello ";std::u32string_view u32StrView = U"hello ";std::u8string_view utf8StrView = u8"hello ";std::u8string_view utf8StrView = u8"hello ";//以R的形式写换行const char* zhuanYiStr = R"(Line1Line2Line3)";//传统的C的方式换行const char* zhuanYiStr = "Line1\n" "Line2\n""Line3\n";//字符串字面量总是存储在只读std::cin.get();
}
http://www.rkmt.cn/news/82332.html

相关文章:

  • 苏州威沃邦胶粘科技有限公司的规模怎样?研发能力强吗? - 工业品牌热点
  • java 十年 工作当中犯的错误
  • expdp用户级别导出导入
  • 企业知识管理的革命:PandaWiki如何用AI重构你的知识资产
  • 槟榔分切机哪个厂家好?槟榔切籽机哪家质量好?推荐晨星机械 - 品牌推荐大师
  • 2025上海比较好的留学机构排名榜单 - 留学机构评审官
  • 在河北唐山市曹妃甸区老家农村盖房子,自建房公司哪家靠谱?曹妃甸区自建房公司实用选择指南 - 苏木2025
  • 武汉水泥砖优质厂家排名(2025最新版),专业的水泥砖源头厂家哪家靠谱鑫俊熙市场认可度高 - 品牌推荐师
  • 食品饮料门店管理痛点多?纷享销客CRM一招搞定
  • 【ACM出版 | EI检索】2026年人机交互、神经网络与深度学习国际学术会议(HNNDL 2026)
  • 投屏软件Scrcpy
  • 2025河南推荐少管所特训学校TOP5:权威测评指南,甄选专 - myqiye
  • 深圳专业少儿芭蕾机构推荐,深度解析苏菲艺术教育的国际化基因与专业坐标 - 速递信息
  • 国产阀门企业盘点 - 速递信息
  • 揭示2025重庆全屋定制供应商排行,主要有哪些优质厂家推荐? - 讯息观点
  • 2025年12月飓丰4.2米保温车,飓丰纯电动保温车,飓丰小型保温车厂家推荐:冷链行业权威盘点与品质红榜发布​ - 品牌鉴赏师
  • 水动力模型中的冷启动和热启动的区别
  • 强行修改Git提交记录的提交人和邮箱
  • Vibe Coding 你应该更激进:用最 SOTA 的模型,赚最高的时薪|编码人声
  • 2025年杭州电子名片公司推荐榜单:免费电子名片‌/企业电子名片‌/微信电子名片源头公司精选 - 品牌推荐官
  • 手把手教你使用Ventoy将一个U盘装多个系统镜像+PE镜像(微PE)
  • 成都新中式仿古门窗厂家推荐:2025 年权威榜发布 - 朴素的承诺
  • 2025 年成都天然气掺氢设备生产厂家最新实力榜 - 朴素的承诺
  • 四川水泥瓦生产实力厂家 —— 彭州市大地彩瓦厂案例分享 - 朴素的承诺
  • 国内国产振实密度仪技术升级,2025哪个品牌公司产品售后好? - 品牌推荐大师
  • 2025年衡水出租救护车公司权威推荐榜单:短途救护车出租/跨市救护车出租/本地救护车出租服务精选 - 品牌推荐官
  • MySQL The storage engine for the table doesnt support repair 错误
  • 2025年浙江超清直播间全彩屏优质商家推荐,看哪家售后服务优 - myqiye
  • 2025年河南五大正规叛逆学校排行榜,知名叛逆孩子教育机构推 - 工业推荐榜
  • 走心机哪家口碑好?2025年国产走心机实力源头推荐厂家/走心机十大品牌排行榜 - 品牌推荐大师