这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
STL的string表示可变长的字符序列。
头文件: #include
- string直接支持字符串连接
- string直接支持字符串的大小比较
- string直接支持子串查找和提取
- string直接支持字符串的插入和替换
- string同时具备字符串数组的灵活性,可以通过 [ ]重载操作符来访问每个字符。
string 初始化
//string 常用的构造函数
string str; //生成一个空字符串
string str ("ABC") //等价于 str="ABC"
string str ("ABC", strlen) // 将"ABC"存到str里,最多存储前strlen个字节
string s("ABC",stridx,strlen) //将"ABC"的stridx位置,做为字符串开头,存到str里.且最多存储strlen个字节.
string s(strlen,'A') //存储strlen个'A'到str里
-
拷贝初始化
- 如果使用等号
=初始化一个变量,实际上执行的是拷贝初始化。 - 编译器把等号右边的初始值拷贝到新建的对象中。
string s = "hello"; //拷贝初始化
- 如果使用等号
-
直接初始化
- 不使用等号,则执行的是直接初始化。
string 对象的常用操作
str1.assign("ABC"); //清空string串,然后设置string串为"ABC"
str1.length(); //获取字符串长度
str1.size(); //获取字符串数量,等价于length()
str1.capacity(); //获取容量,容量包含了当前string里不必增加内存就能使用的字符数
str1.resize(10); //表示设置当前string里的串大小,若设置大小大于当前串长度,则用字符\0来填充多余的.
str1.resize(10,char c); //设置串大小,若设置大小大于当前串长度,则用字符c来填充多余的
str1.reserve(10); //设置string里的串容量,不会填充数据.
str1.swap(str2); //替换str1 和 str2 的字符串
str1.puch_back ('A'); //在str1末尾添加一个'A'字符,参数必须是字符形式
str1.append ("ABC"); //在str1末尾添加一个"ABC"字符串,参数必须是字符串形式
str1.insert (2,"ABC"); //在str1的下标为2的位置,插入"ABC"
str1.erase(2); //删除下标为2的位置,比如: "ABCD" --> "AB"
str1.erase(2,1); //从下标为2的位置删除1个,比如: "ABCD" --> "ABD"
str1.clear(); //删除所有
str1.replace(2,4,"ABCD");//从下标为2的位置,替换4个字节,为"ABCD"
str1.empty(); //判断为空, 为空返回true
读取 string 对象
-
使用标准库
iostream读取string对象使用
cin读取内容到string对象时,会自动忽略开头的空白,从第一个非空白字符串开始读起,直到遇上下一处空白为止。int main(){ string s; cin >> s; cout << s << endl; return 0; }在以上程序中,运行后如果输入的是 " Hello World! " ,则最终s的值为 Hello。
-
使用
getline按行读取如果想保理输入时的空白字符,则可以使用
getline函数代替操作符<<。其语法如下:int main(){ string line; while(getlien(cin, line)){ //按行读取 cout << line << endl; } return 0; }