String类型的注意事项
1、string类型是可变长字符序列,而vector是集合,存放的是某种类型的可变长序列
2、string类型对象的初始化有多种方式:string str="Hello",是将字符串字面值除了最后一个空字符'\0‘,作为副本,拷贝给str。
3、string类型对象的拷贝初始化,是使用等号(=),是将等号右边的值拷贝一份用来给左边的值初始化;而直接初始化则不使用等号,若初始值只有一个,两者皆可,但是若是多个初始值,则使用直接初始化。
4、多个初始值初始化string对象也可以使用拷贝初始化,但是要借助临时量(对象),来存放多个初始值,然后在进行拷贝初始化。
5、string类的操作:is>>s 表示从is中读取字符串赋值给s,字符串以空白分隔,返回is。s1==s2,s1!=s2 string对象的相等性判断,对字母大小写敏感。
6、string类对象末尾没有‘\0’,字符串字面值的末尾有'\0'。
7、string对象从标准输入读取内容,若内容的前面有空白,即忽略,知道遇到真正的字符才开始读取,到遇到下一次空白结束。
8、若想保留输入中的空白,可以通过getline()函数,getline()函数可以从输入流读取一整行,并且包括空白符,getline(cin,word)。其中cin是输入流,word是string对象。使用getline函数时word不包括换行符,
若要换行,需自行加上endl,使用endl结束当前行并刷新缓冲区。
9、string::size_type其实是一个无符号类型的值,并且拥有足够存下任何string对象的大小,因此用来存放string类的size()函数的返回值的变量,都应该是string::size_type类型的。不要使用int去接受size()返回值
因为,int类型是带符号数,而string::size_type是无符号数,两者若同时存在于同一个表达式中,带符号数将会转成无符号数,若int是负数,则会出错。
10、decltype类型和auto类型,都能用在string::size_type类型上,进行推断其类型。
11、当把string对象和字符字面值、字符串字面值放在一条语句中使用,即string str1=str1+'a'+str2+"aaaa"; 必须保证加号两端的运算对象至少有一个是string类的对象,否则编译器会编译出错。
12、string str1=str1+'a'+"aaa"; 这样也符合要求,编译器也认得出来。先执行第一个加号,得到的是一个string对象,这样第二个加号两端一样有一个是string类对象,故合法。
13、标准库类型string,和字符串字面值类型不同,是因为历史遗留原因,为了兼容C语言。
14、若想处理string类型的对象的每个字符,可以使用C++11新标准的范围for语句:遍历给定序列的每个元素,并对序列中每个元素的值执行某种操作。
for(declaration :expression)
statement
declaration:就是用来访问序列中元素,expression:就是序列,是一个对象,statement:每次遍历一次(迭代),就会被初始化为expression序列的下一个元素值,一般这里是对其执行的某种操作。
15、若是使用范围for语句想要修改string对象中字符的值,则declaration中定义的用来访问序列的变量需要使用引用,通过引用去修改其每个字符的值。而statement每次迭代就会将引用绑定到下一个序列元素。
16、string类对象可以使用下标运算符([ ])处理序列中的字符,与数组一样,下标运算符最小参数值是0,最大是对象大小减一。不能出现越界操作,不然会出现无法预知的结果,所以使用下标运算符访问空string对象
也会出现无法预知的结果。
17、下标的值称为index索引或者下标,由于下标运算符接收的参数是string::size_type类型,即无符号类型的值,如果索引值是带符号类型,会被自动转换成无符号类型。
18、不管什么情况下,若使用下标运算符访问string对象的值,那么要检查其访问的位置上是否是空,是否有值,不然会出现未定义行为。
19、下标运算符返回的是索引值位置上的字符的引用,只要字符不是常量,就可以为其赋新值。
20、如果想读取一个char类型的字符串,并且包括空格、制表符、换行符,也要读取进来应该使用cin的成员get()函数,这是由于cin>>ch会忽略掉这些空白符,并且在遇到第一个空白符时停止。前者默认遇到换行符结束,但是并不会在缓冲区中丢弃掉换行符。
String类型的注意事项的更多相关文章
- C++的string类型和继承C语言风格的字符串的区别与注意事项
1.尽可能地在C++程序中使用string,不要使用继承而来的C语言风格的字符串,会出现许多安全问题. 2.C语言的字符串风格,是以空字符结束的,在C++的头文件cstring中定义了C语言风格的字符 ...
- C++之string类型详解
C++之string类型详解 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个泛型类出现,他集成的操作函 ...
- string类型的解释与方法
基本概念 string(严格来说应该是System.String) 类型是我们日常coding中用的最多的类型之一.那什么是String呢?^ ~ ^ String是一个不可变的连续16位的Unico ...
- 基本数据类型和string类型的转换
基本数据类型转string类型: 方式1:fmt.Sprintf("%参数", 表达式) [个人习惯这个,灵活] 函数的介绍: func Sprintf func Sprintf( ...
- ElasticSearch 5学习(9)——映射和分析(string类型废弃)
在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...
- 每日一记-mybatis碰到的疑惑:String类型可以传入多个参数吗
碰到一个觉得很疑惑的问题,Mybatis的parameterType为String类型的时候,能够接收多个参数的吗? 背景 初学Mybatis的时候,看的教程和书籍上都是在说基本的数据类型如:int. ...
- C#string类型总结
字符串的特性:不可变性,每对字符串做拼接或者重新赋值之类的操作,都会在内存中产生一个新的实例. 所以说,在.Net平台下,如果你对一个字符串进行大量的拼接赋值等操作,会产生大量的垃圾. --- ...
- 把《c++ primer》读薄(3-1 标准库string类型初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声 ...
- 【原创】Java和C#下String类型中的==和equals的原理与区别
一.Java下 1.几个例子 public static void main(String[] arge) { String str1 = new String("1234"); ...
随机推荐
- LightOJ 1199 Partitioning Game(sg函数)题解
题意:可以把一堆石子分成不相等的两堆,不能操作为败 思路:把一个石子拆成两个,变成了两个独立的游戏,mex里加上两者的sg异或.sg打表. 代码: #include<set> #inclu ...
- 【Android实验】第一个Android程序与Activity生命周期
目录 第一个Android程序和Activity生命周期 实验目的 实验要求 实验过程 1. 程序正常启动与关闭 2. 外来电话接入的情况 3. 外来短信接入的情况 4. 程序运行中切换到其他程序(比 ...
- 圆点博士 陀螺仪和加速度计MPU6050的单位换算方法
圆点博士陀螺仪和加速度计MPU6050的单位换算方法 陀螺仪和加速度计MPU6050的单位换算方法 对于四轴的初学者,可能无法理解四轴源代码里面陀螺仪和加速度数据的那些数学转换方法.下面我们来具体描述 ...
- UVa 1590 IP网络(简单位运算)
Description Alex is administrator of IP networks. His clients have a bunch of individual IP addres ...
- Python matplot的使用(一)
其实,使用它的直接原因是因为matlab太大了,不方便.另外,就是它是免费的. 在安装这个库的时候,会需要安装一些它所依赖的库,比如six等.从sourceforge上下载,只需按照提示安装完成就行了 ...
- Python写ROS 订阅与发布程序
1. 编写talker代码 vim ..../src/talker.py #!/usr/bin/env python # license removed for brevity import rosp ...
- 简说Spring事务
一.事务定义: 事务指逻辑上的一组操作,这组操作要么全部成功,要么全部失败. 二.事务的特性: 1. 原子性 - 指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 2. 一致性 ...
- iOS Socket编程-C语言版(TCP)
. TCP Socket编程 TCP是面向连接的,安全可靠的传输层协议.TCP的程序基本框架设计图: TCP的程序基本框架设计图.jpg 注意:Socket通信一定有要服务端和客户端. 1.1 TCP ...
- CMake Error: CMake was unable to find a build program corresponding to "Ninja".
系统环境: $ lsb_release -a LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:g ...
- URAL 1183 Brackets Sequence
URAL 1183 思路:区间dp,打印路径,详见http://www.cnblogs.com/widsom/p/8321670.html 代码: #include<iostream> # ...