C++基础 -- string类型
本博文由 西北工业大学MOOC 总结而来,以备以后回顾。(侵删)
string类
1、使用string类的优点:
String是C++为处理字符串类型数据所提供的新的类型。C++的String类相较于C语言的字符串数组,具有以下优点:
- String类采用动态内存管理,所以不必担心内存是否不足,同时也弥补了字符串数组长度是固定值的缺点。且字符串的末尾不需要以 ‘\0’ 结尾。
- 能够检测和控制诸如越界之类的错误,使得处理字符串的操作变得安全,提高代码的稳定性。
- 封装和集成了字符串多种处理操作,完全可以替代C语言的字符串操作。且可以使用运算符对字符串进行操作,更加方便。
2、string类的使用:
2.1、string类的头文件:
使用String类文件,需要包含相应的头文件,如下:
#include <string> //不能写为<string.h>
2.2、string对象的定义和初始化:
定义和初始化字符串对象的方法与定义变量的方法类似。如果string对象没有初始化则一律是空字符串。需要注意,C++字符串对象不需要NULL字符结尾。
char S1[20]; //C风格字符串
string str1; //定义string对象
string sx, sy, xz; //定义多个string对象
//初始化
char S2[20] = "Java"; //C风格字符串初始化
string str2 = "Java"; //string对象复制初始化
string str3("C++"); //string对象直接初始化
2.3、string对象的引用:
与变量类似,只是使用string对象名就表示它的引用:
str1 = "Pascal";
2.4、string对象的输入与输出:
可以在输入输出语句中直接使用string对象来输入输出字符串:
cin >> str1; //输入到str1
cout << str2; //输出str2
gets(S1); //C语言风格输入
puts(S2); //C语言风格输出
* 2.5、string对象与C风格字符串的转换
str1 = "Java"; //C风格字符串可以直接赋值给string对象
str1.c_str(); //string转换为C风格字符串,返回char指针
str1.copy(S1, n, pos); //把str1中从pos开始的n个字符复制到S1字符数组
3、string对象的操作:
string对象允许使用运算符进行操作,类似C风格字符串的处理。如复制(strcpy)、连接(strcat)、比较(strcmp)等。
3.1、string对象赋值
string对象可以使用赋值运算,其功能是字符串复制。可以将字符串常量复制给string对象。
str1 = “Pascal”; //字符串常量复制到string对象中。
strcpy(S1, "Pascal"); //C风格字符串复制到字符数组中
str1.assign(S1, n); //将C风格字符串S1开始的n个字符赋值给str1
3.2、string对象连接运算
string对象允许使用 加号(+)和 混合赋值(+=)运算符实现两字符串连接操作。
string str1 = "12", str2 = "AB", str3 = "CD";
str1 = str2 + str3; //str1结果为ABCD
str1 = str1 + "PHP"; //str1结果为12PHP
str1 += str3; //str1结果为12CD
3.3、string对象关系运算
string对象可以使用关系运算符来实现字符串的比较:
string str1 = "ABC", str2="XYZ"
str1 > str2; //结果为假
str1 == str2; //结果为假
str1 == "ABC" //结果为真
3.4、string对象其他常用操作
string str1 = “ABCDEFGHIJK”;
//1. 获取字符串的长度
n = str1.size(); //n=11
n = str1.length(); //n=11
//2. 检查字符串是否为空字符串
b = str1.empty(); //b为假
//3. 提取子字符串
str2 = str1.substr(2, 4); //从下标2开始的4个字符,即str2 = "CDEF";
//4. 查找子字符串
n = str1.find("DEF", pos); //从pos处开始查找字符串"DEF"在str1中的位置,n = 3
//5. 删除字符
str1.erase(3, 5); //从下标3开始往后删5个字符,str1变为ABCIJK
//6. 增加字符
str1.append("12345", 1, 3); //在str1的末尾增加"12345"下标从1开始的3个字符,即"234";
//7. 字符串替换和插入操作
str1.replace(p0, n0, S1, n); //删除p0开始的n0个字符,然后在p0处插入字符串S1的前n个字符
str1.replace(p0, n0, str2, pos, n); //删除p0开始的n0个字符,然后在p0处插入字符串str2的从pos开始的前n个字符
str1.insert(p0, S1, n); //在p0位置插入字符串S1前n个字符
str1.insert(p0, str2, pos, n); //在p0位置插入字符串str2从pos开始的前n个字符
3.5、string对象数组
定义string对象数组,即数组元素是字符串对象,定义形式与数组类似:
因为string对象是动态分配内存,所以成员的长度是动态的,不像C语言字符串数组一样是对齐的。、
string SY[5] = {"123", "12", "1234", "1", "12345"};
//长度 3, 2, 4, 1, 5
char SA[5][20] = {"123", "12", "1234", "1", "12345"};
//长度均为20