1. string类
1.1 基本概念
string是C++ STL 中定义的标准类,与C语言中的字符数组(char[])类似,但是有更完善的API,使用更加便捷。C++中使用string类,要引用头文件<string>。
1.2 string的构造
string有好几个构造函数,使用方式如下:
string str1; //不初始化,默认为空
string str2("Hello"); //使用字符串"Hello"初始化,str2中内容为"Hello"
string str3(str2); //使用string类型的str2初始化,str3与str2内容相同
string str4(3, 'A'); //使用多个重复的字符进行初始化,str4中内容为"AAA"
string str5(str2, 1, 4); //使用另一个string类的一部分来初始化,str5内容为str2的第一个字符往后,总共4个字符长度的内容,就是"ello"
string str6("world", 1, 3); //同样的,可以使用字符串的一部分进行初始化,原理同上,str6中内容为"orl"
上述初始化后,从str1到str6输出依次为:
1.2 string对象的连接
字符串的拼接,在C语言中要使用strcat()函数(需要考虑地址是否足够,指针是否正确),在string类中,操作就简单很多,可以使用append()函数来完成字符串的拼接。
string str1("123"), str2("456"), str3("789");
str1.append(str2); //str1="123456"
str1.append(str3, 0, 2); //str1="12345678",注意两个数字(0,2)分别是,起始位置,长度,而不是起始和终止位置
str1.append(3, 'A'); //str1="12345678AAA"
str1.append("UVWXYZ", 3, 3); //str1="12345678AAAXYZ"
1.3 string对象的比较
string对象的比较可以直接使用比较运算符(">", "<", "=", "!="等),对于string子串的比较,可以使用compare()方法,如下:
string str1("123"), str2("456"), str3("ABC012");
cout << (str1 > str2) << endl; //比较str1和str2,str1不大于str2,false,输出0
cout << str1.compare(str3) << endl; //比较str1和str3,str1小的时候返回-1,(大的时候返回1,相等返回0)
cout << str1.compare(1, 2, str2, 3, 4); //比较str1中子串[1,2](就是"23")与str2中子串[3,4]("01")的大小,返回1
1.4 string对象的查找
在串中查找某个字串第一次出现的位置,C语言中有strstr()函数(返回主串中子串第一次出现的位置,不存在返回NULL,自己用C语言实现strstr()函数可以用经典的KMP模板匹配算法)。string类中的find()函数具有相同的功能。最常用的查找就是find(),实现查找主串中子串第一次出现的位置,返回值是整型;若不存在,返回-1;
string str1("123456");
cout << str1.find("45") << endl;//find查找主串中子串出现的首位置,返回整型,表示下标,这一行输出3
int n = str1.find("8"); //n=0xffffffff,就是-1了
cout << n << endl; //输出-1
1.5 其他常用操作
- insert(): 插入。使用insert()方法可以在string对象的指定位置插入另一个字符串。str1.insert(插入处下标,待插入子串);
- erase():删除。erase(num1,num2)删除从[num1,num2]区间内的字符(闭区间),如果没有num2,则删除到结尾;
- substr():求子串。substr(num1,num2)参数与erase()相同,两个数字,表示构造子串的区间,如果没有num2,表示到结尾;
- length():求字符串长度,返回整型数(size()方法可以实现同样的功能);
- swap():交换两个子串。str1.swap(str2)交换str1和str2;
- []:与C语言中字符数组类似,通过"[]"访问字符串中的字符,下标从0开始。