一、标准C++库头文件 #include <string>
二、string 对象的读写
string s;
1.标准输入输出读取string对象:cin>>s;(1)读取并忽略开头所有空白字符(如空格、换行符、制表符);(2)读取字符直至再次遇到空白字符,读取终止;
2.使用getline函数读取一行文本:getline(cin,s);(1)getline函数从输入流的下一行读取,读取内容放在s中,不包括换行符;(2)getline不忽略开头的换行符。遇见换行符就终止,如果其作为第一个字符,则s置为空string
两者都将istream对象作为返回值,因此可以通过返回对象判断输入流是否有效。
eg:循环读入未知数目string对象
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
/*string s;
while(cin>>s)
{
cout<<s<<endl;
}
return 0;
}
eg:将上面改为读入一行文本
string line;
while(getline(cin,line))
{
cout<<line<<endl;
}
三、string对象的基本操作
string s;
1.s.size();//返回字符个数
返回类型是string::size_type类型,被定义为unsigned型具有相同的含义,这是一种配套类型(companion type),通过它们,库类型使用可以实现机器无关性。(存储s.size()返回值的变量必须定义为string::size_type类型,不能讲其赋值给int类型)
2.s.empty()//判断是否为空
3.string的关系操作符
string对象的比较实际是比较每个string对象的字符,按照字典顺寻,区分大小写,在多数系统上,大写字母小于任意小写字母。
(1)==:长度相同,字符相同
(2)如果两个string对象长度不同,短的与长的前面相同,则短的小于长的
(3)如果两个对象字符不同,比较第一个不同
4.赋值操作
支持赋值操作,string s1,s2="hello world";s1=s2;理论上的过程是释放s1的原有空间,分配足够存放s2副本的空间,复制。
5.连接操作
(1)使用+操作符; string s3=s1+s2; +操作符返回的是一个string对象
(2)使用复合赋值操作符+=;s1+=s2;
(3)与字符串字面值的连接;这里我理解字符串字面值就是一个匿名常量字符串。+操作符左右操作数中必须至少有一个是string类型的。string s4=s1+"hello";
6.从string对象获得字符
通过string::size_type类型的下标([index])来访问string对象的字符; 下标操作符返回值可以作为左值,即s[index]='*';注意,在标准库中,不检查索引值,所以下标越界的错误是没有定义的,容易导致运行时错误。
string s="hello world";
for(string::size_type index=0;index<s.size();index++)
{
cout<<s[index]<<" ";
}
7.string对象中的字符处理
string对象中的字符处理可以应用各种字符处理函数,这些函数在cctype头文件中定义。