C++基本语言:1.7string类型介绍

C++基本语言包含10章节内容,存于C++从入门到精通专栏

目录

一、前言 

二、string类型简介

三、定义和初始化string对象

四、string对象上的操作

一、前言 

C语言的内置类型,如int、float、char等, 这些是属于语言本身提供的。

C++中,因为标准库的存在,还会接触到很多标准库中定义的类型。 如string类型、vector类型等。

string是用来处理可变长字符串用的, vector是一种集合、容器或者动态数组的概念。

二、string类型简介

string这个类型,看成一个类类型(类 类似于 struct)

string类型是一个标准库中的类型,代表一个可变长字符串。

在C语言中,一般会用字符数组来表示字符串:

6652aabfdeb9441794af1fe7bb2916dd.png

在C++中,依然可以用字符数组来表示字符串,也可以用string类型来表示字符串

e7cd09a9107440b988d3812638dfc7c9.png

三、定义和初始化string对象

① string s1; //效果是s1="",代表一个空串

②string s2="I love china";//把字符串的内容复制到s2代表的一段内存中,注意拷贝时不包括\0

③ string s3("I love china");//与s2效果一样

④string s4=s2;//把s2的内容复制到s4所代表的一段内存中

⑤int num=6;string(num,'a');//aaaaaa,这种方式系统会在内部创建临时对象,不太推荐

⑥ string s11(str);//用c语言的字符数组初始化string类型

此时str是abC;s11也就是abC,两个不是一个内存  这也是一种初始化方式,用C语言形式的字符数组(字符串)来初始化string

四、string对象上的操作

(1)判断是否为空empty(),返回布尔值。

f6233189ca4e4b46b501e042bbd492af.png

(2)size()或者length():返回字节/字符数量,代表字符串的长度。unsigned int。

03ff3cbf4e244390aaf8c265a631dd0f.png

(3)s[n]:返回s中的第n个字符(n是一个整型值,代表位置),字符位置从0 开始计算,n的取值范围是 0~.size()-1,如果用下标引用超过这个范围,或者用下标访问一个""的string,都会产生不可预测的结果。

96628e4c5ebf4f1a9f72971380eae28b.png

(4)s1+s2:字符串连接,返回连接后的结果,其实就是得到一个 新string对象。

7f906d292b3b44248d5a57e20c65725e.png

(5)s1=s2:字符串对象赋值,用s2里面的内容取代原来s1里面的内容。

027fa8de764a43c780601bf9d039bc24.png

(6)s1==s2:判断两个字符串是否相等(长度相同,字符也全相同),大小写敏感,也就是大写字符与小写字符是两个不同的字符。

95eb69419ae44fb4874e3424e1ebb857.png

(7)s1!=s2:判断两个字符串是否不相等。

e8714b7fe4054b63bf206349ee60fb28.png

(8)s.c_str():返回一个字符串s中的内容指针(内容实际上就是string字符串里的内容)

返回的是一个指向正规C字符串的常量指针,所以是以“\0”结尾的。

这个函数是为了与C语言兼容,在C语言中没有string类型,所以得 通过string类对象的成员函数c_str把string对象转换成C中的字符串样式

fcbba40a150649bf8930dadbe9265344.png

注意:s10你访问地址,前面会有一些不相干的东西

p真正指向的部分是从abC开始的,他会忽略前面奇怪的部分,从真正的abC开始

const char *p 你可以指向它,但你不能修改它

(9)读写string对象。

c1cc5e341dce4b5da41debd30f09a1d3.png

(10)字面值和string相加

77ec300d3b424de582132d609dbc366b.png

实际上在这里"and "和'e'(字符串和单个字符)都被转换成了string对象参与加法运算。

注意易错点:(从左到右结合)

aee4121a2d224994af451bfb08fbd59d.png

注意

a18ae512e6a74cc2b070bb7cf83be4cd.png

可以理解成"abc"+s1结果肯定是生成一个临时的string对象,然后又跟def相加,再生成临时对象,然后复制给s5。

(11)范围for针对string的使用。

范围for语句,能够遍历一个序列中的每个元素,这里string就可以看成是一个字符序列。

15b8d6961d7346c3834e77fda9a7da73.png

还可以修改s1里的值,例如把小写字母变成大写字母

只需要把类型调整成引用就可以了。请注意看,这里可以设置断点调试,观看c的地址,其实是s1中字符串的地址。

d64c181037f5448b8830417353d79c25.png

toupper()相当于把小写字符转换成大写字符,对于大写字符没变化

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梆梆显眼梆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值