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";
它是容器类……

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

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值