定义
在C语言中使用字符数组的形式来表示字符串,c++中新加了string
容器来专门表示字符,所以在c++中可以有两种方式来表示数组:
1,使用字符数组表示
char a[]= "hello"; //此时a的长度为6,最后一个字符为'\0'
char *a = "hello"; //(这样写会被警告)此时a被定义为指针
注:上述第二种写法,会报警(无法将字符常量转化为字符指针,原因如下:"hello",是一个字符常量(字符串),将其赋给字符数组自然没有任何问题,但是如果将其赋值给字符指针的话,这里会发生强制类型转换,而一个常量转换为指针会被强制转换为常量指针const char*
,不是char *
,所以会报错,解决办法*就是我们在进行一次强制类型转换,使得等号两边类型一致,即char *a = (char *)"hello"
2,使用string容器
加入头文件<string>
或者<string.h>
,因为string是标准库所以加不加.h
都可以
如:
string a = "hello";
string a("hello");
计算字符串的长度
1,sizeof()
sizeof()
是计算占内存的字节数,所以使用该函数计算字符串的长度时会把字符串结束标志'\0'加上,所以要减一。
注:
-
char* a = "hello"
,如果使用这种方法定义字符串,那么sizeof(a)
一定得到8或者4,因为你计算的是指针a的长度,而不是a指向的字符串的长度 -
string a("hello");
,如果这样定义字符串,那么sizeof(a)
一定返回32,因为string
是一个容器,大小为32,容器内部并不是存储的字符串,而是存储指向字符串的封装指针,大小永远是32。
2,strlen()
strlen()
是定义在<string>头文件中的函数,用于计算字符数组代表的字符串的长度(不包含'\0'),但是使用std::string a("hello")
定义的字符串不能直接使用该方法,需要将string
转化为字符数组才行,具体如下strlen(a.c_str())
。其实计算string
的长度我们更推荐他自己的成员函数.size()
,即a.size()
.