目录
标准库 string 类型
string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作。标准库 string类型的目的就是满足对字符串的一般应用。
与其它的标准库类型一样,用户程序要使用 string 类型对象,必须包含相关头文件。如果提供了合适的using声明,那么编写出来的程序会变得简短些:
#include<string>
using namespace std;
string 对象的定义和初始化
string 标准库支持几个构造函数。构造函数是一个特殊成员函数,定义如何初始化该类型的对象。下表列出了几个string 类型常用的构造函数。当没有明确指定对象初始化式时,系统将使用默认构造函数。
警告:标准库 string 类型和字符串字面值
因为历史原因以为为了与C语言兼容,字符串字面值和string 类型不是同一种类型。这一点很容易引起混乱,编程时一定要注意区分字符串字面值和string 数据类型的使用。
string 对象的读写
用iostream 标准库来读写内置类型的值。使用标准的输入输出操作符来读写 string 对象:
#include<iostream>
using namespace std;
int main()
{
string s;
cin>>s;
cout<<s;
return 0;
}
从标准输入读取string 并将读入的串存储在s中。string 类型的输入操作符:
1.读取并忽略开头所有的空白符(如空格、换行符、制表符)
2.读取字符直至再次遇到空白字符,读取终止
使用getline读取整行文本
另外还有一个有用的 string IO操作:getline。这个函数接受两个参数:一个输入流对象和一个string对象。getline函数从输入流的下一行读取,并保存读取的内容不包括换行符。和输入操作符不一样的是,getling并不忽略开头的换行符。只要getline遇到换行符,即便它是输入的第一个字符,getline也将停止读入并返回。如果第一个字符就是换行符,则string参数被置为空string。
#include<iostream>
using namespace std;
int main()
{
string s;
while(getline(cin,s))
{
cout<<s<<endl;
}
return 0;
}
由于s不含换行符,如要逐行输出需自行添加。照常我们用endl来输出一个换行符并刷新输出缓冲区。
string 对象的操作
关系操作符比较两个 string对象时采用了和(大小写敏感的)字典排序相同的策略:
1.如果两个string对象长度不同,且短的string对象与长的string对象的前面部分相匹配,则短的string对象小于长的string对象
2.如果string 对象的字符不同,则比较第一个不匹配的字符。
举个例子:
两个string对象相加
string对象相加被定义为连接。也就是说,两个(或多个)string 对象可以通过加操作符+或者复合操作符+=连接起来。给定两个string对象:
string s1("hello,");
string s2("world\n");
下面把两个string对象连接起来产生第三个string对象:
string s3=s1+s2; //s3 is hello,worle\n
如果要把s2直接追加到s1的末尾,可以使用 +=操作符;
s1+=s2; // 相当于 s1=s1+s2;
和字符串字面值的连接
当进行string 对象和字符串面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的。
从string 对象获取字符
string 类型通过下标操作符[]来访问string对象中的单个字符。需要注意的是string对象的下标从0开始
string 对象中字符的处理
我们经常艺对string 对象中的单个字符进行处理,例如,通常需要知道某个特殊字符是否为空白字符、字母或数字,下表列出了各种字符操作函数,适用于string 对象的字符(或其它任何char值)。这些函数在cctype头文件中定义。
摘自《C++ primer》