三、C++数据类型
4、字符串类型
C++有两种字符串类型,一种是C风格的字符串,另一种是C++引入的字符串类型。
C风格字符串:它被储存在一个字符数组中,一般通过char*来操作。使用标准c库中操作字符串数组的函数时,必须要引入头文件:
#include <cstring>
// 返回字符串的长度
int strlen( const char* );
// 比较两个字符串是否相等
int strcmp( const char*, const char* );
// 把第二个字符串拷贝到第一个字符串中
char* strcpy(char*, const char* );
C风格的字符串指针也总是指向一个字符数组的第一个元素,即使是字符串常量,系统也会把常量储存在一个字符串数组中。一般用循环遍历方式访问。可以用解引用后是否为空字符来作为判断条件。
C风格字符串的长度可以为0,有两种方式:
1、把字符串指针置零
2、字符串指针指向的数组只有一个空字符
const char *pc2 = "";
使用指针遍历字符串数组时需要注意:
1、在循环体条件中,要注意解引用,否则可能会陷入无限循环。
2、如果要指针在遍历后重新指向原来字符串的头部,需要st=st-len-1,重新让指针定位。也可以再定义一个新的指针,让它代替st遍历字符串数组。
C++标准库也提供了抽象的字符串类【string】:也必须包含头文件<string>,以下是string的一些操作方式:
string str("The world"); //定义1
string str1(str); //拷贝构造,也可以用显式
str.size(); //返回有多少个字符
str.empty(); //返回bool类型的true和false判断有无内容
str+=str1; //将两个或者多个字符串连接起来
C风格字符串和string字符串的混合使用:
1、string能将C风格字符串直接转换成srting
2、反向的转换不能自动进行,必须显式调用c_str()函数,然而这样的调用会返回一个指向常量数组的指针,必须加上const修饰符定义。
const char *str = s1.c_str(); // ok