标准库类型 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的主要内容,如果未能解决你的问题,请参考以下文章

标准库类型 string

标准库类型 string

标准库类型 string

3.2 标准库类型string(上)

3.2 标准库类型string(下)

标准库类型String