string类型
string类型表示可变长的字符序列,使用string类型必须引入string头文件。
#include <string>
using namespace std;
一、定义和初始化string对象
在字符串字面值中,编译器在每一个字符串字面值的结尾处都加上一个空字符’\0’,例如“fancy”,就变成了”fancy\0”。
定义和初始化string对象有许多方式。
string s1; //一个空字符串
//以下两种方式是等同的
string s2 = "fancy"; //将字面值"fancy"除空字符外赋值给s2
string s3("fancy");
//以下两种方式是等同的
string s4 = s2;
string s5(s3);
string s6(5,'c'); //s6为ccccc
注意s2和s3的赋值是等价的,但又有不同,s2执行的是拷贝初始化(认为有等号的就是拷贝初始化),而s3执行的是直接初始化。
二、string对象的操作
1. 读写string
① 普通读写— 用IO操作符读写string对象
在读操作时,会自动忽略开头的空白(空格符,换行符,制表符),从第一个字符开始读起,到之后第一个空白符结束。
string s, ss;
//输入 " hello world ", s 为 hello
cout << "请输入" << endl;
cin >> s;
cout << s << endl;
//输入 " hello world ", s 为 hello ss 为 world
cout << "请输入" << endl;
cin >> s >> ss;
cout << s << ss << endl;
② 整行读写—用getline(is,s)读取string对象
当我们需要保留输入数据中的空格时,普通的输入符是做不到的,要用getline(is,s)函数来代替输入符,getline(is,s)从is中读取字符串,以换行符为分割,将回车符之前的字符赋给s(不包括换行符)。
string line;
//getline()返回cin,可以判断输入流是否结束或损坏
while (getline(cin, line))
{
cout << line << endl;
}
2. empty()和size()
① empty()—判断对象是否为空,返回bool类型,空1不空0。
② size()—获取对象长度,注意size()函数返回的是一个无符号整型数,是string::size_type类型的(一个神秘的类型,不深究)。
3. 比较string对象
C++提供的许多运算符也可用于比较两个string类型的对象,在比较过程中,对大小写敏感。
== 、!= 运算符用于比较两个string对象是否相同(当且仅当长度和字母完全相同)。
<、>、>=、<= 运算符用于比较两个string对象的大小(按字典序进行比较)。
4. 拼接string
① 两个string对象拼接
string c1 = "fancy", c2 = "666";
string c3 = c1 + c2;
c1 += c3;
② string对象和字面值拼接 保证每个加号左右两边至少有一个string对象
string c1 = "fancy", c2 = "666";
string c4 = c1 + ' ' + c2; //合法
string c5 = c1 + "love"; //合法
string c6 = c1 + ' ' + "love"; //合法,c1 + ' '运算结束后是一个临时string对象
string c7 = ' ' + "love" + c1; //非法
三、处理string对象中的字符
C++提供了cctype头文件(实际上是C语言中的ctype.h),提供给我们获取字符属性的函数。
范围for语句
范围for语句可以很好的使我们,对string对象的每一字符进行处理。
for( 变量 : 对象)
操作;
其中,每一次循环,变量都会被初始化为对象的下一个元素值。
string cute = "fancy";
for (auto c : cute) //auto使编译器自动识别c的类型。
cout << c;
cout << endl;
//小写变大写
for (auto &c : cute)
c = toupper(c);
cout << cute << endl;
关于string类型,在后续顺序容器中有更详细的解释:
http://blog.csdn.net/fancynece/article/details/79225748