当前位置: 首页 > article >正文

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


http://www.kler.cn/a/229641.html

相关文章:

  • Leetcode 3418. Maximum Amount of Money Robot Can Earn
  • OpenStack 网络服务的插件架构
  • Three.js教程015:全面讲解Three.js的UV与应用
  • 根据浏览器的不同类型动态加载不同的 CSS 文件
  • HarmonyOS开发:传参方式
  • QML states和transitions的使用
  • Unity_ShaderGraph节点问题
  • e^{ix} 的 conjugate value(复共轭)
  • 易点易动设备管理系统——精确管理BOM,提升生产效率
  • 【AI绘画+Midjourney平替】Fooocus:图像生成、修改软件(Controlnet原作者重新设计的UI+Windows一键部署)
  • Autovue R21.1 发布
  • Flask 入门4:Flask 模板
  • 容器化技术基础概念:雪花服务器与凤凰服务器
  • IEC61499 学习记录
  • 敏捷软件研发管理流程- scrum
  • VXLAN:虚拟化网络的强大引擎
  • JSch - 配置SFTP服务器SSH免密登录
  • C语言学习(6)—— 指针
  • 第十四篇【传奇开心果系列】Python的OpenCV库技术点案例示例:图像特征提取与描述
  • ST-LINK USB communication error的解决办法
  • npm修改镜像源
  • 运算符重载(在c++中使用set、map存储结构体)
  • C++进阶(十一)C++11
  • 面试经典题---76.最小覆盖子串
  • Vite与Webpack打包内存溢出问题优雅处理方式
  • 【开源】基于JAVA+Vue+SpringBoot的数据可视化的智慧河南大屏