STL之容器string
C++提供的STL,这个标准库里面包含了容器类,string就是容器类的其中一员,那么string容器有什么特点吗?让小编带你一起来了解一下吧。
目录
string
1. string的定义和初始化
2. string的赋值操作
3. string获取字符的操作
4. string的拼接操作
5. string的查找操作
6. string的替换操作
7. string的比较操作
8. string的子串获取操作
9. string的插入和删除操作
10. string 的reserve预留空间操作
11. string的swap函数和容量、长度获取
12. string判断是否为空串
string
如果你要使用string容器,那么需要添加头文件
#include
1. string的定义和初始化
string ser_str1; // 定义一个空串string ser_str2(10,'s'); // 定义一个字符串,由10个s组成string ser_str3(ser_str2); // 使用serven_1来定义字符串string ser_str4("三贝勒文子"); // 参数为常量的构造函数来定义字符串
运行结果:
2. string的赋值操作
-
operator=:C++中string容器重写了operator=,包括了下面三种赋值的方式:
// string& operator=(const char* str); // char*类型字符赋值给当前的字符串// string& operator=(char c); // 字符赋值给当前字符串// string& operator=(const string& s); // 字符串s赋值给当前字符串char* s = "你好";ser_str1 = s;cout<<"char*类型字符赋值给当前的字符串:"<<ser_str1<<endl;char c = 'S';ser_str1 = c;cout<<"把字符赋值给当前的字符串:"<<ser_str1<<endl;ser_str1 = "三贝勒文子";cout<<"把字符串s赋值给当前的字符串:"<<ser_str1<<endl<<endl;
运行结果:
-
assign():该函数是赋值函数:
// string assign(const char* s); // char*类型字符赋值给当前字符串// string assign(int n, char c); // 把n个字符c赋值给当前字符串// string assign(const string& s); // 把字符串s赋值给当前字符串// string assign(const string& s, int nstart, int n); // 将字符串s下标为nstart开始的地方后n个字符赋值给当前字符串// string assign(const string& s, int n;) // 将字符串s下标为0开始的地方后n个字符赋值给当前字符串char* s = "你好";ser_str1.assign(s);cout<<"char*类型字符赋值给当前的字符串:"<<ser_str1<<endl;out<<ser_str1<<endl;char c = 'S';ser_str1.assign(1,c);cout<<"把1个c1字符赋值给当前的字符串:"<<ser_str1<<endl;ser_str1.assign("三贝勒文子");cout<<"把字符串s赋值给当前的字符串:"<<ser_str1<<endl;ser_str1.assign("Hello World!",3,5);cout<<"将字符串s下标为3位置开始往后的5个字符赋值给新字符串:"<<ser_str1<<endl;ser_str1.assign("Hello World!", 5);cout<<"将字符串s下标为0位置开始往后的5个字符赋值给新字符串:"<<ser_str1<<endl<<endl;
运行结果:
3. string获取字符的操作
-
string获取字符有两种方式,分别是at和operator[],代码如下:
// 通过at取字符 cout<<"字符串的第三个位置的字符:"<<ser_str1.at(2)<<endl; // 通过operator[]取字符 cout<<"字符串的第二个位置的字符:"<<ser_str1[1]<<endl<<endl;
运行结果:
4. string的拼接操作
拼接操作有两种方式,分别是operator+=和append,两种的操作方式如下:
operator+=:
// string& operator+=(const string& s);// string& operator+=(const char* s);// string& operator+=(const char c); ser_str1 += "三贝勒文子, "; cout<<ser_str1<<endl; char* s2 = "你真帅"; ser_str1 += s2; cout<<ser_str1<<endl; ser_str1 += '!'; cout<<ser_str1<<endl;
append():
// string& append(const string& s);// string& append(const char* s);// string& append(int n, char c); // 在当前字符串结尾添加n个字符c// string& append(const string& s, int pos, int n);// string& append(const char* s, int n);ser_str1.append("你好高吖!");cout<<ser_str1<<endl;char* s3 = "眼睛真好看!";ser_str1.append(s3);cout<<ser_str1<<endl;ser_str1.append(1,'-');cout<<ser_str1<<endl;ser_str1.append("I LOVE YOU",0,6);cout<<ser_str1<<endl;char* s4 = " YOU";ser_str1.append(s4,4);cout<<ser_str1<<endl<<endl<<endl;
运行结果:
5. string的查找操作
查找字符或者字符串的方式有正向查找和反向查找,两者示例为:
-
find():正向查找
ser_str1 = "My name is Serven, I come from china, I like writting and Reading. this is My home";// int find(const string& s, int pos = 0)const; 查找s第一次出现的位置,从pos开始找// int find(const char* s, int pos = 0)const; 查找s第一次出现的位置,从pos开始找// int find(const char* s, int pos, int n); 从pos位置查找s的前n个字符第一次出现的位置// int find(const char c, int pos = 0)const; 查找字符c第一次出现的位置cout<<"ser_str1"<<ser_str1<<endl;cout<<"从0位置开始找第一个My的位置:"<<ser_str1.find("My",0)<<endl;cout<<"从7位置开始找第一个My的位置:"<<ser_str1.find("My",17)<<endl;cout<<"寻找Serven字符串中的Ser的第一次出现的位置:"<<ser_str1.find("Ser",0)<<endl;
运行结果:
-
rfind():反向查找
// int rfind(const string& s, int pos=npos)const; 查找s最后出现的位置,从pos开始找// int rfind(const char* s, int pos = npos)condt; 查找s最后一次出现的位置,从pos开始查找// int rfind(const char* s, int pos, int n)const; 从pos查找s的前n个字符最后一次的位置// int rfind(const char c, int pos)const; 查找字符c最后一次出现的位置cout<<"倒数第一个My的位置:"<<ser_str1.rfind("My")<<endl; // 第二个参数默认是字符串的结尾总字符数cout<<"寻找writting字符串中的wri的倒数第一次出现的位置:"<<ser_str1.rfind("wri")<<endl<<endl;
运行结果:
6. string的替换操作
-
replace():
/* string的替换操作 */ ser_str1 = "Hello world!"; // string& replace(int pos, int n, const string& s); 替换从pos开始n个字符为字符串s ser_str1.replace(6, 6 ,"Serven"); cout<<ser_str1<<endl<<endl;
运行结果:
7. string的比较操作
-
compare():compare函数在>时返回 1,<时返回 -1,==时返回 0。比较区分大小写,比较时参考字典顺序,排越前面的越小。大写的A比小写的a小。
//int compare(const string &s) const;//与字符串s比较//int compare(const char *s) const;//与字符串s比较ser_str1 = "Hello World";ser_str2 = "Hello Serven";cout<<"Hello World和Hello Serven作比较:"<<ser_str1.compare(ser_str2)<<endl;cout<<"Hello World和Hello World作比较:"<<ser_str1.compare(ser_str1)<<endl;cout<<"Hello Serven和Hello World作比较:"<<ser_str2.compare(ser_str1)<<endl;
运行结果:
8. string的子串获取操作
-
substr():
ser_str1 = "Hello World";// string subStr(int pos = 0, int n = npos)const; // 返回由pos开始的n个字符组成的字符串cout<<"返回从第3个位置开始的三个字符子串:"<<ser_str1.substr(2,3)<<endl;
运行结果:
9. string的插入和删除操作
-
insert():
-
erase():
/* string 插入和删除操作 */ //string& insert(int pos, const char* s); //插入字符串 //string& insert(int pos, const string& str); //插入字符串 //string& insert(int pos, int n, char c);//在指定位置插入n个字符c //string& erase(int pos, int n = npos);//删除从Pos开始的n个字符 ser_str1 = "Hello orld"; ser_str1.insert(6,1,'W'); cout<<"在第六个位置插入字符W:"<<ser_str1<<endl; ser_str1.erase(0,1); cout<<"在第0个位置删除1个字符:"<<ser_str1<<endl<<endl;
运行结果:
10. string 的reserve预留空间操作
-
reserve(n):给字符串预留空间
/* 为字符串预留空间 */string serven_str_4;cout<<"serven_str_4没有预留空间前的容量:"<<serven_str_4.capacity()<<endl;serven_str_4.reserve(10);cout<<"serven_str_4预留空间后的容量:"<<serven_str_4.capacity()<<endl;
运行结果:
11. string的swap函数和容量、长度获取
-
s1.swap(s2):将字符串s1和s2互换;
-
size():获取字符串的长度;
-
capacity():获取字符串的容量;
/* string的长度和容量获取以及swap */ string serven_str_1 = "Hello World"; string serven_str_2 = "Serven"; cout<<"原本的serven_str_1:"<<serven_str_1<<endl; cout<<"原本的serven_str_2:"<<serven_str_2<<endl; cout<<"serven_str_1的长度为:"<<serven_str_1.size()<<endl; cout<<"serven_str_1的容量为:"<<serven_str_1.capacity()<<endl; serven_str_1.swap(serven_str_2); // 交换serven_str_1和serven_str_2 cout<<"交换后的serven_str_1:"<<serven_str_1<<endl; cout<<"交换后的serven_str_2:"<<serven_str_2<<endl; cout<<"serven_str_1的长度为:"<<serven_str_1.size()<<endl; cout<<"serven_str_1的容量为:"<<serven_str_1.capacity()<<endl; string serven_str_3 = serven_str_1; cout<<"serven_str_3的长度为:"<<serven_str_3.size()<<endl; cout<<"serven_str_3的容量为:"<<serven_str_3.capacity()<<endl; cout<<"serven_str_1的最大的长度为:"<<serven_str_2.max_size()<<endl<<endl;
运行结果:
12. string判断是否为空串
-
empty():判断字符串是否为空串,是的话返回1
cout<<"serven_str_3是否为空串:"<<serven_str_3.empty()<<endl<<endl;
运行结果:
13. string和char*的互换操作
/* string 和 char* 的转换*/ // string转char* string serven = "helloworld"; const char* serven_1 = serven.c_str(); // 一i的那个要定义为常量指针,因为要保证指针不能指向别的位置了 cout<<serven_1<<endl; //char*转string char* serven_2 = "serven"; string serven_3(serven_2); cout<<serven_3<<endl<<endl;
运行结果: