C++基本语言包含10章节内容,存于C++从入门到精通专栏
目录
C语言的内置类型,如int、float、char等, 这些是属于语言本身提供的。
C++中,因为标准库的存在,还会接触到很多标准库中定义的类型。 如string类型、vector类型等。
string是用来处理可变长字符串用的, vector是一种集合、容器或者动态数组的概念。
string这个类型,看成一个类类型(类 类似于 struct)
string类型是一个标准库中的类型,代表一个可变长字符串。
在C语言中,一般会用字符数组来表示字符串:
在C++中,依然可以用字符数组来表示字符串,也可以用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
(1)判断是否为空empty(),返回布尔值。
(2)size()或者length():返回字节/字符数量,代表字符串的长度。unsigned int。
(3)s[n]:返回s中的第n个字符(n是一个整型值,代表位置),字符位置从0 开始计算,n的取值范围是 0~.size()-1,如果用下标引用超过这个范围,或者用下标访问一个""的string,都会产生不可预测的结果。
(4)s1+s2:字符串连接,返回连接后的结果,其实就是得到一个 新string对象。
(5)s1=s2:字符串对象赋值,用s2里面的内容取代原来s1里面的内容。
(6)s1==s2:判断两个字符串是否相等(长度相同,字符也全相同),大小写敏感,也就是大写字符与小写字符是两个不同的字符。
(7)s1!=s2:判断两个字符串是否不相等。
(8)s.c_str():返回一个字符串s中的内容指针(内容实际上就是string字符串里的内容)
返回的是一个指向正规C字符串的常量指针,所以是以“\0”结尾的。
这个函数是为了与C语言兼容,在C语言中没有string类型,所以得 通过string类对象的成员函数c_str把string对象转换成C中的字符串样式。
注意:s10你访问地址,前面会有一些不相干的东西
p真正指向的部分是从abC开始的,他会忽略前面奇怪的部分,从真正的abC开始
const char *p 你可以指向它,但你不能修改它
(9)读写string对象。
(10)字面值和string相加
实际上在这里"and "和'e'(字符串和单个字符)都被转换成了string对象参与加法运算。
注意易错点:(从左到右结合)
注意
可以理解成"abc"+s1结果肯定是生成一个临时的string对象,然后又跟def相加,再生成临时对象,然后复制给s5。
(11)范围for针对string的使用。
范围for语句,能够遍历一个序列中的每个元素,这里string就可以看成是一个字符序列。
还可以修改s1里的值,例如把小写字母变成大写字母
只需要把类型调整成引用就可以了。请注意看,这里可以设置断点调试,观看c的地址,其实是s1中字符串的地址。
toupper()相当于把小写字符转换成大写字符,对于大写字符没变化