与其他标准库类型一样,用户程序要使用string类型对象,必须包含相关头文件。
1.string对象初始化和定义
string常用的构造函数
这里需要注意string类型与字符串字面值不是同一种类型。
2.string对象的读写
从标准输入读取string,并将其读入的存储在s中。这里我需要注意两点
1读取并忽略开头所有的空白字符串(如空格,换行符,制表符)
2读取字符直至再次遇到空白符,读取终止
2.1 getline()
getline()接受两个参数:一个输入流对象,一个string对象。Getline()从输入流的下一行读取,并将读取的这一行存入提供的string对象。
注意:读取这一行的末尾的换行符(\n)将不会存入string对象,同时和cin不一样的是,getline()不会忽略开头的换行符(\n)。只要getline()遇到换行符,getline就会停止读入并返回。若开头就是换行符(\n),则读入的就是一个空string。例子如下:
3.string对象的操作
上面表格摘自《C++Primer》,他是string的一些常用操作。
3.1 string::size_type
string类型和许多其他库都定义了一些配套类型。通过配套类型,库类型的使用就能与机器无关。size_type就是配套类型之一
在没过看过《C++Primer》之前,对于上图表中的函数size(),很多人都会认为他返回的应该是整型数值(int)。但是实际上,size()操作返回的是string::size_type类型的值。它被定义为与unsigned类型(unsigned int 或者unsigned long)具有相同的意义。
3.2 关系操作符(<,<=,>,>=,!=)
string类型定义了几种关系操作符用来比较两个string值的大小(string对象比较操作区分大小写)
关系操作符(<,<=,>,>=,!=)比较大小时采用了和字典排序相同的策略。
1如果两个 string 对象长度不同,且短的 string 对象与长的 string 对象的前面部分相匹配,则短的string 对象小于长的 string 对象。
2如果string对象的字符不同,则比较第一个不匹配的字符。如下图
word2的长度大于word1,word3长度大于word1,word2。
3.3 string对象连接
2个string对象连接其实是通过加法实现的。如下例:
3.4和字符串字面值的连接(也是使用”+”)
当进行string对象和字符串字面值混合操作时,+操作符的左右操作数必须至少有一个string类型的。如下图:
3.5 从string对象获取字符
string 类型通过下标操作符([ ])来访问 string 对象中的单个字符。下标操作符需要取一个 size_type 类型的值,来标明要访问字符的位置。
3.6 string对象中字符的处理
当要使用上述函数时,要将cctype纳入头文件中。这些函数不用死记硬背。只要知道就行,用的时候可以翻书再查。