标准库类型 string
Posted 穿迷彩服的鲨鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标准库类型 string相关的知识,希望对你有一定的参考价值。
标准库类型 string
前言
- 比较 string 对象
- 为 string 对象赋值
- 两个 string 对象相加
- 字面值和 string 对象相加
一、比较 string 对象
- string 类定义了几种用于比较字符串的运算符。这些比较运算符逐一比较 string对象中的字符,并且对大小写敏感,也就是说,在比较时同一个字母的大写形式和小写形式是不同的。
- 相等性运算符(==和!=)分别检验两个 string 对象相等或不相等, string 对象相计尽味看它们的长度相同而且所包含的字符也全都相同。关系运算符<、<=、>、>=分别位验一个 string 对象是否小于、小于等于、大于、大于等于另外一个 string 对象。上述这些运算符都依照(大小写敏感的)字典顺序:
1.如果两个 string 对象的长度不同,而且较短 string 对象的每个字符都与较长 string对象对应位置上的字符相同,就说较短 string 对象小于较长 string 对象。
2.如果两个 string 对象在某些对应的位置上不一致,则 string 对象比较的结果其实是 string 对象中第一对相异字符比较的结果。
下面是 string 对象比较的一个示例:
string str =" Hello ";
string phrase =" Hello World ";
string slang =" Hiya ";
- 根据规则1可判断,对象 str 小于对象 phrase ;
- 根据规则2可判断,对象 slang 既大于str也大于phrasea 。
二、为 string 对象赋值
- 一般来说,在设计标准库类型时都力求在易用性上向内置类型看齐,因此大多数库类型都支持赋值操作。对于 string 类而言,允许把一个对象的值赋给另外一个对象:
string st1(10,' c '), st2; //st1的内容是 cccccccccc ;st2是一个空字符串
stl =st2; //赋值:用st2的副本替换st1的内容
//此时st1和st2都是空字符串
三、两个 string 对象相加
- 两个 string 对象相加得到一个新的 string 对象,其内容是把左侧的运算对象与右侧的运算对象串接而成。也就是说,对 string 对象使用加法运算符(+)的结果是一个新的 string 对象,它所包含的字符由两部分组成:前半部分是加号左侧 string 对象所含的字符、后半部分是加号右侧 string 对象所含的字符。另外,复合赋值运算符(+=)负责把右侧 string 对象的内容追加到左侧 string 对象的后面:
string s1 = "hello,",s2 = "world\\n"; //
string s3 = s1 + s2; //s3的内容是hello,world\\n
s1+=s2; //等价于 s1 = s1 + s2;
四、字面值和 string 对象相加
- 即使一种类型并非所需,我们也可以使用它,不过前提是该种类型可以自动转换成所需的类型。因为标准库允许把字符字面值和字符串字面值转换成 string 对象,所以在需要 string 对象的地方就可使用这两种字面值来替代。利用这一点将之前的程序改写为如下形式:
string s1 = "hello",s2 = "world "; //在s1和s2中都没有标点符号
string s3 = s1 + "," + s2 + '\\n';
- 当把 string 对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保毎个加法运算符(+)的两侧的运算对象至少有一个是string :
string s4 = s1 + ","; //正确:把一个品 string 对象和一个字面值相加
string s5 = "hello" + ","; //错误:两个运算对象都不是 string 1
string s6 = s1 + "," + "world"; //正确:每个加法运算符都有一个运算对象是 string
string s7 = "hello" + "," + s2; //错误;不能把字面值直接相加
- s4和s5初始化时只用到了一个加法运算符,因此比很容易判断是否合法。s6的初始化式之前没有出现过,但其实它的工作机理和连续输入连续输出一样的,可以用如下的形式分组:
string s6 = (s1 + ",") + "world";
- 其中子表达式s1 + ","的结果是一个 string 对象,它同时作为第二个加法运算符的侧运算对象,因此上述语句和下面的两个语句是等价的:
string tmp = s1 + ","; //正确:加法运算符有一个运算对象是 string
s6 = tmp + "world"; //正确:加法运算符有一个运算对象是 string
- 另一方面,s7的初始化是非法的,根据其语义加上括号后就成了下面的形式:
string s7 = ("hello " + ",") + s2; //错误:不能把字面值直接相加
- 很容易看到,括号内的子表达式试图把两个字符串字面值加在一起,而编译器根本没办法做到这一点,所以这条语句是错误的。
总结
以上是关于标准库类型 string的主要内容,如果未能解决你的问题,请参考以下文章