- 标准库类型string代表可变长的字符序列,使用前需添加头文件<string>,string定义在命名空间std中。
- string的定义和初始化:
- 初始化string对象的几种方式:
-
1 string s1;//默认初始化方式,s1是一个空字符串
2 string s2 = s1;//s2是s1的副本
3 string s3 = "hello";//s3是该字面值的副本
4 string s4("hello");//等价于s3 = “hello”
5 string s5(10,'c');//s5的内容为cccccccccc
- 拷贝初始化和直接初始化
- 如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化
- 反之,如果不使用等号,则执行的是直接初始化
- 当用于类类型对象时,初始化的拷贝形式和直接形式有所不同,直接初始化直接调用与实参匹配的构造函数,拷贝初始化总是调用复制构造函数。拷贝初始化首先使用指定构造函数创建一个临时对象,然后使用复制构造函数将临时对象复制到正在创建的对象
- 对于拷贝初始化,最明显的调用手段就是使用"="符号,但还有许多隐式调用的情况,如:参数传递,函数返回,初始化容器
- 参数传递:对于函数的参数传递,除非是引用参数,否则就是一个使用上层传递参数的拷贝参数
- 函数返回值:除非是引用返回值,否则返回的也是上层对象的一个拷贝
- 读写string
1 //getline函数的作用是从输入流中读取一行字符
2 //示例代码
3 #include <iostream>
4 #include <string>
5 using namespace std;
6
7 int main()
8 {
9 string s;//定义一个名为s的空字符串
10 cout << "enter a sentence" << endl;
11 cin >> s;//将标准输入的内容读取到s中
12 cout << "The string read with cin is:" << s << endl;
13 //在执行读取操作时,string对象会自动忽略开头的空白,并从一个真正的字符开始,直到遇到下一个空白结束
14 //所以如果程序的输入是“ hello world”,则输出将是“hello”,输出结果中没有任何空格
15
16 //getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止,然后把所读内容存入string对象中
17 getline(cin,s);//从输入流中读取内容存入s中
18 }
- size_type
- 由string类类型和vector类类型定义的类型,用于保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型
- size_type是一个无符号类型的值,而且能够放下任何string对象的大小,所有用于存放string类的size函数返回值的变量,都应该是string::size_type类型的
- size_type从本质上讲,是一个整型数,关键是由于机器的环境不同,他的长度是不同的,这就体现了机器无关性
- string对象的比较运算
- 相等性运算符(==和!=)分别检验两个string对象相等或不相等,区分大小写,意味着长度相同且所包含字符也全部相同
- str.compare(“ str1”)==0 str和str1比较,若相等则为compare返回0,与0比较为真,反之则为假
- string对象的拼接
- 两个string对象相加得到一个新的string对象,其内容是把左侧的运算对象与右侧的运算对象串接而成
1 string s1 = "hello, ",s2 = "world
";
2 string s3 = s1 + s2;//s3的内容是hello, world
1 //当把string对象和字符字面值以及字符串字面值混在一条语句中使用时,必须确保每个加法运算符两侧的运算对象至少有一个是string对象
2 string s4 = s1 + ", ";//正确,把一个string对象和字符串字面值相加
3 string s5 = "hello" + ",";//错误,两个运算对象都不是string