IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c字串和String字串的区别 -> 正文阅读

[C++知识库]c字串和String字串的区别

今天总结一下c/c++字串的类别。
c + + 中,有两种字串 { 从 c 沿袭过来的 c 字串 c + + 的 s t l 资源提供的 s t r i n g 类型的字串 c++中,有两种字串\left\{\begin{matrix} 从c沿袭过来的c字串 \\ c++的stl资源提供的string类型的字串 \end{matrix} \right. c++中,有两种字串{c沿袭过来的c字串c++stl资源提供的string类型的字串?

c串

在存储结构中表现为字符序列,故常用字符数组表示c串。

c串以0作为字符序列的结束符。c串空间存储长度为字串长度加一。

c串数组表示

将字串放入字符数组,则多1

char buffer[7]={'h','e','l','l','o','!',0};//必须大于等于7,没有0就构不成字串
char buffer[7]={'h','e','l',0,'l','o','!'};//正确,但字串长度为3
//下面的形式与上面等价
char c1[]={"hello!"};
char c2[]="hello!";
//都是7个字符

除了字符数组,其他类型的数组都不能被输出设备之间用数组名输出。

数组名作为变量也只有字符数组有意义,而且通过输出数组名来输出字串也要依靠字串本身的结束标记。

字符指针

若仅仅用于输出字串,就不需要将字串存入数组,用一个字符指针,指向字串的起始位置,因而直接把字串赋值给字符指针。

char* c="hello";//由下得出c:存储在另辟蹊径的空间中
//初始化的意义就是将指针c指向这块字串空间的起始地址

在c/c++中,如果在字符数组初始化定义中出现字串字面值,就将字面值填入字符数组中。

? 若字串字面值出现在其他场合,那么字面值就作为只读内存存储在独立的空间中。

指针的类型若是字符常量,则可以抑制指针对其进行修改访问:

const char* c="hello!";

事实上,所有字面值类型都是const的!

字串的输出,用字符数组的数组名也好,用字符指针也好,都是因为他们表示的是字串的起始地址。这些都在说明,数组名与指针肯定有关系

c串操作

字符数组能做到的

char a[10]="hello";
cin>>a;
cout<<a;
cout<<a[0];

字符数组不能做到的

代表字符地址的数组名和真是的字串还是有差别的。

比较大小,地址不能代替字符比较。

数组名牢牢的捆绑着数组所拥有的空间,把数组名看作变量,想要修改它的企图都是对数组空间的重组和破坏:

int a[10],b[10];
a=b;//错误,不能让数组a放弃自身空间而去关联数组b
int c1="hh";
int c2=c1;//错误,字串不能通过数组名赋值的方式从一个地方拷贝到另一个地方
c1="good";//错误,字串的替换操作,设计数组元素存储的重组,根本非法

字串查找操作涉及遍历所有数组元素,数组根本无法承担。

获取字串长度也不行,对于只能进行下标访问的数组显得无能为力,只能表示数组空间大小。

string串

string是一种数据类型,最初属于第三方提供的stl(标准模板库)资源。后来并入c++系统。使用string类型需要string头文件。

使用c库函数(就上面求长度啥的)使用string.h,或者c++头文件cstring。

string为字串类,他产生的string实体就是string串
初始化 { s t r i n g s 1 ( " h e l l o " ; ) / / s t r i n g ( s t r [ , 起始位置,个数 ] s t r i n g s 2 = s 1 ; s t r i n g s 3 = " h e l l o " ; 初始化\left\{ \begin{matrix} string s1("hello";) //string(str[,起始位置,个数]\\ string s2=s1;\\ string s3="hello"; \end{matrix} \right. 初始化? ? ??strings1("hello";)//string(str[,起始位置,个数]strings2=s1;strings3="hello";?
它是容器类……

别的就不说了,网上都有,本文仅供区分。嘿嘿。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:22:12  更:2022-10-08 20:25:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 5:21:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码