最近学习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. nave node 的虚拟环境管理工具

    nave 是类似python venv 的node 虚拟环境管理工具 安装 npm install -g nave 简单使用 帮助命令 Usage: nave <cmd> Commands ...

  2. 腾讯蓝鲸cmdb部署

    蓝鲸配置平台 (CMDB)http://172.16.6.10:8088 环境(单机测试): Centos6 16G 200G 依赖环境: Java 1.8.0_92 python 2.7 ZooKe ...

  3. 链表 | 判断链表B是否为链表A的连续子序列

    王道P38T16 代码: bool common_subSequence(LinkList &A,LinkList &B){ LNode *pA,*pB=B->next,*p=A ...

  4. KVM系统镜像制作

    使用virt-install创建虚拟机并安装GuestOS virt-install是一个命令行工具,它能够为KVM.Xen或其它支持libvirt API的hypervisor创建虚拟机并完成Gue ...

  5. Dubbo自定义Filter统一处理异常

    Dubbo版本:2.7 使用自定义Filter注意事项 1.自定义名称不能和默认Filter相同,否则可能不生效 2.只用定义Filter类和META-INF下的文本文件,不用添加配置,@Activa ...

  6. How to receive a million packets per second

    Last week during a casual conversation I overheard a colleague saying: "The Linux network stack ...

  7. .Net Core NOPI操作word(二) 表格操作

    一.创建表格操作 private void btnExport_Click(object sender, EventArgs e) { var dbcontext = new BlogModel(); ...

  8. Beef搭建并通过Nginx绑定域名

    Beef和Nginx安装过程这里就不再说明了相关链接:Beef官方安装教程 1. 修改Beef的config.yaml配置文件 xss连接地址改成要绑定的域名 sudo vim /beef/confi ...

  9. MLflow系列1:MLflow入门教程(Python)

    英文链接:https://mlflow.org/docs/latest/tutorial.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11943280.h ...

  10. input file上传文件弹出框的默认格式设置

    我们使用html的input 标签type="flie"时,如何设置默认可选的文件格式 <input id="doc_file" type="f ...