最近学习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++中几种字符串表示方法的更多相关文章

  1. Sql Server中三种字符串合并方法的性能比较

    文章来自:博客园-DotNet菜园 最近正在处理一个合并字符吕的存储过程,在一个测试系统的开发中,要使用到字符串合并功能,直接在Sql中做.示例:有表內容﹕名称  內容1     abc1      ...

  2. shell脚本中8种字符串截取方法_转自脚本之家

    转自:http://www.jb51.net/article/56563.htm 参考:http://blog.csdn.net/taiyang1987912/article/details/3955 ...

  3. python——3种字符串反转方法

    在学习过程中,总结了3种字符串反转方法: 1.切片法 这种方法最为简便 str='abad' print(str[::-1]) · 用切片操作,将字符串以步长-1重新整理,即 'str[-1],str ...

  4. [翻译]python3中新的字符串格式化方法-----f-string

    从python3.6开始,引入了新的字符串格式化方式,f-字符串. 这使得格式化字符串变得可读性更高,更简洁,更不容易出现错误而且速度也更快. 在本文后面,会详细介绍f-字符串的用法. 在此之前,让我 ...

  5. (数据科学学习手札131)pandas中的常用字符串处理方法总结

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在日常开展数据分析的过程中,我们经常需要对 ...

  6. javascript中数组和字符串的方法比较

    × 目录 [1]可索引 [2]转换 [3]拼接[4]创建[5]位置 前面的话 字符串和数组有很多的相同之处,它们的方法众多,且相似度很高:但它们又有不同之处,字符串是不可变值,于是可以把其看作只读的数 ...

  7. ASP.NET中26种性能优化方法

    系统类  Type类,Object类,String类, Arrary类,Console类, Exception类,GC类, MarshalByRefObject类, Math类. DateTime结构 ...

  8. python的三种字符串格式化方法

    1.最方便的 print 'hello %s and %s' % ('df', 'another df') 但是,有时候,我们有很多的参数要进行格式化,这个时候,一个一个一一对应就有点麻烦了,于是就有 ...

  9. ES6中的模板字符串使用方法

    传统的 JavaScript 语言,输出模板通常是这样写的. $('#result').append( 'There are <b>' + basket.count + '</b&g ...

随机推荐

  1. Load Testing Socket.IO Web Applications and Infrastructure

    转自:https://medium.com/better-programming/load-testing-socket-io-web-applications-and-infrastructure- ...

  2. haproxy 2.0 dataplaneapi rest api 转为graphql

    haproxy 2.0 dataplaneapi rest api 是比较全的,以下是一个简单的集成graphql,通过swagger-to-graphql 转换为graphql api 方便使用 环 ...

  3. Shell 中eval的用法

    test.sh:pipe="|"eval ls $pipe wc -l 输出bogon:Desktop macname$ ./test.sh 45 test.sh:eval ech ...

  4. Java中Set真的是无序的吗?

    我们经常听说List是有序且可重复的,Set是无序且不重复的.这是一个误区,这里所说的顺序有两个概念,一是按照添加的顺序排列,二是按,照自然顺序a-z排列.Set并不是无序的传统所说的Set无序指的是 ...

  5. tidyr

    tidyr包主要提供了数据整理和清洗的功能,包括 1. 数据框的变形 2. 处理数据框中的空值 3. 根据一个表格衍生出其他表格 4. 实现行或列的分隔和合并 该包将要用的数据处理成标准且统一的数据框 ...

  6. 【转】vim复制与粘贴

    用vim写代码时,经常遇到这样的场景,复制多行,然后粘贴. 这样做:1. 将光标移动到要复制的文本开始的地方,按v进入可视模式.2. 将光标移动到要复制的文本的结束的地方,按y复制.此时vim会自动将 ...

  7. Self-Supervised Representation Learning

    Self-Supervised Representation Learning 2019-11-11 21:12:14  This blog is copied from: https://lilia ...

  8. eclipse中自定义注释模板

    eclipse中自定义注释模板 2018年10月09日 10:51:27 lm_y 阅读数 857更多 分类专栏: java Java   编辑注释模板的方法:Window->Preferenc ...

  9. SpringMVC 事件监听 ApplicationListener

    1. 实现 ApplicationListener<T> 接口(T为监听类型,稍后会列出具体可监听事件) 2. 将该自定义监听类,注册为Spring容器组件.(即将该类注入Spring容器 ...

  10. MQTT研究之EMQ:【EMQX使用中的一些问题记录(3)】

    EMQX功能强大,但是帮助信息或者可用资料的确有限,遇到个问题,比较难找到处理的头绪,今天,我要记录的是,使用中出现EMQX宕机,但是呢,启动也启动不了. 今天记录的内容,就以操作EMQX 3.2.3 ...