C++之string和char的使用及区别
一、概念
- Char:在C中,char是定义一个字符,存储的是一个字符,占一个字节,如’a’,C++中char是字符类型,是一种基本数据类型;
- String:string是一个模板类,实例化的是对象,它的内部是封装了const char*类型,是一个常量指针,指向可以改变,但是指向的值不能改变。
- 字符串:字符串是使用’\0’终止的一维字符数组(字符串的长度为字符个数加1,’\0’也占一个长度)。在C++中,字符串有两种,一种是字符串char[],即C风格的字符串,一种是封装好的字符串类String。
二、操作函数
- strcpy(s1,s2) 复制字符串s2到s1,s2复制到了最前面
- strcat(s1,s2) 连接字符串s2到字符串s1的末尾
- strlen(s1) 返回字符串s1的长度
- strcmp(s1,s2) 比较字符串的大小,若s1=s2,返回0,若s1> s2 ,返回正数,若s1< s2,返回负数
- strchr(s1,ch) 返回一个指针,指向s1中字符ch第一次出现的位置
- strstr(s1,s2) 返回一个指针,指向s1中字符串s2第一次出现的位置
三、例子
1、字符串定义例子
1 2 |
|
2、定义string及一些基本操作
1 2 3 4 5 6 |
|
3、string中的每一个字符,使用单引号,是char类型
1 2 3 4 5 6 7 |
|
4、字符串输出
1 2 3 4 5 |
|
四、Char和string异同
在c++中,C风格的字符串和String类的比较,可以看下面这张图
char是一个字符型指针,可以指向一个字符数组,与string不太相同的是,字符数组存储的字符串必须以’\0’结尾,代表结束符号,而string并不一定以’\0’结束。
string的内存管理是由系统处理的,除非内存池用完,否则基本上不会出现什么内存问题。
而char的内存需要自己手动管理了,很容易出现内存问题。
五、char*和string的互相转化
如果要将string直接转换为const char*类型,可以使用两个函数。
1、c_str()
1 2 |
|
c_str()函数返回一个指向正规C字符串的指针,内容与string相同,因为C本身没有string类。但是,上面这种用法很不安全,因为ch最后指向的内容是垃圾值,s对象被析构了。而且c_str()返回的是一个临时指针,不能对其进行操作。
2、strcpy()
通过strcpy函数来进行转换是安全的:
1 2 3 |
|
3、data()
1 2 |
|
- 那c_str()和data()有什么区别呢?
- c_str()会在数据的末尾添加’\0’结束符,多数用于使用字符串场合。
- 而data()函数不会添加’\0’结束符。
4、如果要转换为char而非const char类型
1 2 3 4 5 |
|
5、通过str[i]的方式取值的类型
1 2 3 |
|
六、总结
以上为个人经验,希望能给大家一个参考,