c++中的char[] ,char* ,string三种字符串变量转化的兼容原则
这里,我们不搞传统的普及工作,这里重点讲三种可以存储字符串的变量char[] ,char* ,string,它们的兼容原则,而不是转换方法。
文章目录
- 一、三种存储字符串的变量
- 1、字符数组
- 2、字符指针
- 3、string类
- 二、三种变量的转换
- 1、变量间转化的原则
- 2、三种变量的兼容排序及转化
- 3、高级字符向低级转换
文章原出处: https://blog.csdn.net/haigear/article/details/135939354
一、三种存储字符串的变量
1、字符数组
比如,我们用字符串数组可以存储一个“hello”的字符串,但这个字符串必须拆分成一个个的字符存储在字符串数组中,如下:
char strchar[5]={'h','e','l','l','o'};
当然,即使是字符串数组我们也可以使用cout或者printf来打印输出。如下:
cout<<strchar;
2、字符指针
用字符指针来存储字符串似乎应用的场合更广,也是我们在控制台程序中使用最多的,优点是不需要将字符串逐个的拆分为字符。如下:
char* strpointer="hello";
cout<<strpointer;
在用到字符串转换到字符指针的时候,我们可能还会用到const char*,这里不展开讲。
3、string类
使用字符串类来存储字符串,我认为是最方便和最正规的方法,只不过需要包含string类,这个类是c++自带的,已经在安装的IDE的默认库文件目录下。
#include <string>
string str="hello";
cout<<str;
以上三种字符串比较而言string是最方便的,因为,毕竟它是专为字符串的操作而设计的一个类,有很多便于字符串操作的方法,包括字符串内的增删改查等;
很明显,string类操作字符串更高级。
二、三种变量的转换
1、变量间转化的原则
如果说变量转化有原则,那便是高级对低级兼容的原则。
变量之间进行转化在每种语言中都会遇到,也是必须掌握的,但他们有一个规律,那就是高级对低级兼容,这也就是我前面为何要说string是操作字符串最高级的形式。
2、三种变量的兼容排序及转化
string>char*>char[],即字符串类兼容字符指针兼容字符数组。也即是说,可以直接将低级的变量赋值给高级字符串变量,那么以下的操作就是合法的转化:
名称 | 操作方法 | 代码实例 |
---|---|---|
字符数组转字符指针 | 字符指针=字符串数组 | strpointer=strchar; |
字符指针转字符串类 | 字符串类对象=字符指针 | str=strpointer; |
字符数组转字符串类 | 字符串类对象=字符数组 | str=strchar; |
#include <iostream>
using namespace std;
#include <string>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
char strchar[5]={'h','e','l','l','o'};
char* strpointer="hello char pointer";
string str="hello string";
int main(int argc, char** argv) {
cout<<strchar<<endl;
cout<<strpointer<<endl;
cout<<str<<endl;
//convert operation beginning
strpointer=strchar;
str=strpointer;
str=strchar;
cout<<strchar<<endl;
cout<<strpointer<<endl;
cout<<str;
return 0;
}
输出的结果如下:
3、高级字符向低级转换
很多函数的参数接受的是字符指针char*,如果我们拿到的是字符串string,这个时候我们也要将其转换为字符指针,方法如下:
首先将字符串转换为const char*,然后将得到的const char* 赋值给char*
string str="hello string ";
char* strp=nullptr;
const char* constcharp=nullptr;
constcharp=str.c_str();
strp=const_cast<char*>(constcharp);
如果说,我们要将字符串string,直接转换为char数组,那只能通过内存拷贝的方法了。这里暂不赘述。
本文仅通过字符串的三种不同存储方式和转化方法来阐释变量之间转化时的兼容原则。
文章随时可能更新,请关注文章原出处:
https://blog.csdn.net/haigear/article/details/135939354