C++中几种字符串表示方法
最近学习C++时,被几种字符串搞的有点乱,这里记录一下。
c++中有两种风格字符串,分别是:
- C++风格字符串
- C风格字符串
它们各自的声明方式如下:
void main(){
string a = "hello"; //C++风格
char *b = "hello"; //C风格
char c[] = "hello"; //C风格
}
C++风格字符串
string是c++标准库定义的类型。string支持下标操作,可以修改string中的一部分。同时string可以看作存储char的vector容器的特化,所以string支持一般的容器操作。
string a="hello“;
a[] = 's'; //支持下标操作 //通过迭代器输出首尾元素
cout<<*a.begin();
auto e = a.end();
cout <<*(--e);
C风格字符串
C风格字符串不是一种类型,而是一种约定俗成的写法。即字符串放在字符数组中并以空字符结束(’\0‘)。
char ca1[]={'C', '+', '+'}; //没有以’\0'结尾,非c风格字符串
char ca2[]={'C', '+', '+', '\0'}; // 显式添加'\0'
char ca3[]="C++"; // 编译器会自动在末尾添加空字符
char *cp="C++"; // 编译器会自动在末尾添加空字符
其中,使用字符数组时,只能在定义的时候初始化,同时,对于字符指针型的字符串(char *str),字符数组可以直接赋值给字符指针型字符串,但反之就不行。
char[] str_1 = "hello"; //正确
char[] str_2;
char* str_3 = "world";
str_2 = "hello" //错误,此时的str_2是一个数组名,不能这样赋值
str_2[] = 'h'; //正确
str_3 = str_1; //正确
str_1 = str_3; //错误
两种风格字符串间的转换
在编程程序的时候,尽量使用string,但有很多时候修改老代码的时候不得已会用到C风格字符串,所以需要用到两种风格间字符串的转换。
1.C风格字符串转换为C++风格字符串
string类能够自动将C风格字符串转化为C++风格字符串,也就是说C风格字符串能够直接赋值给string。
string str_1;
char * str_2 = "hello";
char[] str_3 = "world“; str_1 = str_2; //正确
str_1 = str_3; //正确
2.C++风格字符串转换为C风格字符串
这种转换需要用到函数c_str,这个函数返回的是一个const *char类型的值。
string str_1 = "hello";
char *str_2 = str_1.c_str(); //错误,c_str()返回的是const char*
const char* str_3 = str_1.c_str() ; //正确
C++中几种字符串表示方法的更多相关文章
- Sql Server中三种字符串合并方法的性能比较
文章来自:博客园-DotNet菜园 最近正在处理一个合并字符吕的存储过程,在一个测试系统的开发中,要使用到字符串合并功能,直接在Sql中做.示例:有表內容﹕名称 內容1 abc1 ...
- shell脚本中8种字符串截取方法_转自脚本之家
转自:http://www.jb51.net/article/56563.htm 参考:http://blog.csdn.net/taiyang1987912/article/details/3955 ...
- python——3种字符串反转方法
在学习过程中,总结了3种字符串反转方法: 1.切片法 这种方法最为简便 str='abad' print(str[::-1]) · 用切片操作,将字符串以步长-1重新整理,即 'str[-1],str ...
- [翻译]python3中新的字符串格式化方法-----f-string
从python3.6开始,引入了新的字符串格式化方式,f-字符串. 这使得格式化字符串变得可读性更高,更简洁,更不容易出现错误而且速度也更快. 在本文后面,会详细介绍f-字符串的用法. 在此之前,让我 ...
- (数据科学学习手札131)pandas中的常用字符串处理方法总结
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常开展数据分析的过程中,我们经常需要对 ...
- javascript中数组和字符串的方法比较
× 目录 [1]可索引 [2]转换 [3]拼接[4]创建[5]位置 前面的话 字符串和数组有很多的相同之处,它们的方法众多,且相似度很高:但它们又有不同之处,字符串是不可变值,于是可以把其看作只读的数 ...
- ASP.NET中26种性能优化方法
系统类 Type类,Object类,String类, Arrary类,Console类, Exception类,GC类, MarshalByRefObject类, Math类. DateTime结构 ...
- python的三种字符串格式化方法
1.最方便的 print 'hello %s and %s' % ('df', 'another df') 但是,有时候,我们有很多的参数要进行格式化,这个时候,一个一个一一对应就有点麻烦了,于是就有 ...
- ES6中的模板字符串使用方法
传统的 JavaScript 语言,输出模板通常是这样写的. $('#result').append( 'There are <b>' + basket.count + '</b&g ...
随机推荐
- [sdoi 2017]树点涂色
传送门 Description Bob 有一棵\(n\)个点的有根树,其中\(1\)号点是根节点.Bob 在每个节点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是,这条路径上的点(包括起点 ...
- [CMS] UsualToolCMS-8.0 sql注入漏洞【转载】
原文地址:http://lyscholar.cn/2019/07/30/代码审计-usualtoolcms存在sql注入漏洞/ 0x01 漏洞环境 版本信息:UsualToolCMS-8.0-Rele ...
- 查看大图、html查看大图、js查看大图
$(".pimg").click(function(){ var _this = $(this);//将当前的pimg元素作为_this传入函数 imgShow("#ou ...
- Honk's pool[STL multiset]
目录 题目地址 题干 代码和解释 题目地址 Honk's pool(The Preliminary Contest for ICPC Asia Shenyang 2019 ) 题干 代码和解释 本题使 ...
- answer
https://www.cnblogs.com/549294286/p/10451394.html 基于BIO实现的Server端,当建立了100个连接时,会有多少个线程?如果基于NIO,又会是多少个 ...
- XML 中 5 个预定义的实体引用
< < 小于 > > 大于 & & 和号 ' ' 省略号 " " 引号
- Xamarin.FormsShell基础教程(2)创建Shell解决方案
Xamarin.FormsShell基础教程(2)创建Shell解决方案 创建Shell解决方案 在开发Shell的应用程序时,首先需要创建一个Shell解决方案,其具体操作步骤如下: (1)在VS的 ...
- tensorflow 13:多gpu 并行训练
多卡训练模式: 进行深度学习模型训练的时候,一般使用GPU来进行加速,当训练样本只有百万级别的时候,单卡GPU通常就能满足我们的需求,但是当训练样本量达到上千万,上亿级别之后,单卡训练耗时很长,这个时 ...
- SpringBoot Error creating bean with name 'dataSource' defined in class path resource。。。
启动spring boot项目出错 解决方法在Application类上增加:@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration ...
- 【转】Revit二次开发——读取cad中的文字信息
Revit读取cad的文字信息需要借助Teigha的开源dll,在程序中添加下图中红色框的dll文件的引用,其他的dll文件全部放在同一个文件夹中即可,运行的时候,会自动把这些dll文件全部复制到bi ...