STL容器——string

1.string容器

本质:string是C++风格的字符串,但是string本质是一个类,string字符串的第一个字符位置为0。

区别string和char*:

char*是一个指针。

string是一个类,类内有char*,有一个char*的容器来管理这个字符串(string)

优:

string类内部封装了很多成员方法,像是:查找find,拷贝copy,删除delete,替换replace,插入insert等。

同时string管理char*分配的内存,无需担心复制越界或是取值越界等问题,这些均有string类内部自主处理。

 

①string是一个类,他的一些构造函数如下:

●string();  //创建一个空的字符串,例如:string str;

  string(const char* s);  //用字符串s来初始化

●string(const string& str);  //用一个string对象初始化另一个string对象

●string(int n, char c);  //使用n个字符c,来初始化

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 void test1(){
 6     string s1;
 7 
 8     const char* str = "hello world";
 9     string s2(str);
10     cout << "s2=" << s2 << endl;
11 
12     string s3(s2);
13     cout << "s3=" << s3 << endl;
14 
15     string s4(10 ,'a');
16     cout << "s4=" << s4 << endl;
17 }
18 
19 int main(){
20     test1();
21     system("pause");
22     return 0;
23 }

②string的赋值

作用:给字符串赋值啊。。

赋值的函数原型如下:

● string& operator= (const char* s);  //char*类型字符串 赋值给当前的字符串

● string& operator= (const string &s);  //把字符串s赋值给当前字符串

● string& operator= (char c);  //用字符串赋值给当前的字符串

● string& assign(const char* s);  //把字符串s赋值给当前字符串

● string& assign(const char* s, int n);  //把字符串的前n个字符赋值给当前字符串

● string& assign(const string &s);  //把字符串s赋值给当前字符串

● string& assign(int n, char c);  //用n个字符c赋值给当前字符串

例子:

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 //operator=的三个例子
 7 void test01(){
 8     string str1;
 9     str1 = "nihao";
10     cout << "str1=" << str1 << endl;
11 
12     string str2;
13     str2 = str1;
14     cout << "str2=" << str2 << endl;
15 
16     string str3;
17     str3 = 'a';
18     cout << "str3=" << str3 << endl;
19 }
20 
21 //assign的四个例子
22 void test02(){
23     string str4;
24     str4.assign("wow,hhh");
25     cout << "str4=" << str4 << endl;
26 
27     string str5;
28     str5.assign("ab,cdef",3);
29     cout << "str5=" << str5 << endl;
30 
31     string str6;
32     str6.assign(str4);
33     cout << "str6=" << str6 << endl;
34 
35     string str7;
36     str7.assign(5,'h');
37     cout << "str7=" << str7 << endl;
38 }
39 
40 int main(){
41     //test01();
42     test02();
43     system("pause");
44     return 0;
45 }

③string字符串拼接

作用:在字符串末尾拼接字符串。。

函数原型如下:

● string& operator+= (const char* str);  //重载+=,在当前字符串后面连接新的字符串

● string& operator+= (const char c);  //重载+=,在当前字符串后面增加一个字符c

● string& operator+= (const string& str);  //重载+=,在当前字符串后面连接另一个字符串

● string& append(const char *s);  //把字符串s连接到当前字符串结尾

● string& append(const char *s, int n);  //把字符串s的前n个字符连接到当前字符串结尾

● string& append(const string &s);  //同string& operator+= (const string& str);

● string& append(const string &s, int pos, int n);  //字符串s中从pos开始的n个字符连接到当前字符串结尾

例子:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 //operator
 6 void test01(){
 7     string str1 = "你好你好";
 8     str1 += ",哈哈哈";
 9     cout << "str1= " << str1 << endl;
10 
11     string str2 = "wowow";
12     str2 += 'c';
13     cout << "str2= " << str2 << endl;
14 
15     string str3 = "ooo";
16     str3 += str1;
17     cout << "str3= " << str3 << endl;
18 }
19 
20 //append
21 void test02(){
22     string str4 = "hh";
23     str4.append("66666");
24     cout << "str4= " << str4 << endl;
25 
26     string str5 = "324";
27     str5.append("abc,defg",4);
28     cout << "str5= " << str5 << endl;
29 
30     string str6 = "nihao:";
31     str6.append(str4);
32     cout << "str4= " << str4 << endl;
33 
34     string str7 = "mmm";
35     str7.append("123456",3,2);
36     cout << "str7= " << str7 << endl;
37 }
38 
39 int main(){
40     // test01();
41     test02();
42     system("pause");
43     return 0;
44 }

④string查找替换

作用:

1.查找:查找指定字符串是否存在(有就返回相应的值[切记位置由字符串开头为1开始往后数,无论你指定第几个开始查找],没有就返回-1)

2.替换:在指定位置替换字符串

函数原型如下:

区别find和rfind:find是从左往右查找,rfind是从右往左查找。。

例子:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 //查找
 5 void test1(){
 6     string str1 = "012345678910";
 7     int a = str1.find("10",5);  //无论从第几个位置开始找,总会返回从字符串开头到指定字符串的位置的值(10),而非从第5个字符开始,就返回5
 8     cout << "a= " << a <<endl;
 9 
10     int b = str1.rfind("10");
11     cout << "b= " << b <<endl;
12 }
13 //替换
14 void test2(){
15     string str2 = "hi,gg!"; //6个字符
16     str2.replace(3, 2,"world"); //从第3个后面开始的2个字符(gg),替换为world
17     cout << "str2= " << str2 << endl;
18 }
19 
20 int main(){
21     // test1();
22     test2();
23     system("pause");
24     return 0;
25 }

⑤string字符串比较

作用:比较字符串(按ASCII码来进行比较,等于返回0,大于返回1,小于返回-1)。。

在中文中,比较大小主要用来检测两个字符串是否相等,大小没有什么意义。

函数原型如下:

例子:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 void test(){
 6     string s1 = "bi";
 7     string s2 = "bi";
 8     string s3 = "ai";
 9     string s4 = "ci";
10 
11     int a = s1.compare(s2);
12     int b = s1.compare(s3);
13     int c = s1.compare(s4);
14 
15     //在abc的ASCII中a值最小,b居中,c最大
16     cout << "a= " << a <<endl;
17     cout << "b= " << b <<endl;
18     cout << "c= " << c <<endl;
19 }
20 
21 int main(){
22     test();
23     system("pause");
24     return 0;
25 }

⑥string单个字符存取

对于string的单个字符存取有两种方式:

也可以通过此种方式修改字符串里面的某个字符。。

例子:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 void test(){
 6     string s = "hello";
 7     for(int i = 0; i < s.size() ; i++){
 8         cout << s[i] << endl;
 9     }
10     for(int i = 0; i < s.size() ; i++){
11         cout << s.at(i) << endl;
12     }
13 
14     s[0] = 'x';
15     s.at(4) = 'w';
16     cout << "s= " << s << endl;
17 }
18 
19 int main(){
20     test();
21     system("pause");
22     return 0;
23 }

⑦string的插入和删除

作用:字面意思。。

函数原型如下:

例子:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 void test(){
 6     string s1 = "hello";
 7     s1.insert(2,"wow"); //从第2个字符后开始插入wow
 8     cout << "s1= " << s1 << endl;
 9 
10     string s2 = "hi";
11     s2.insert(1,s1);    //从第1个字符后开始插入字符串s1
12     cout << "s2= " << s2 << endl;
13 
14     s1.erase(3,4);
15     cout << "s1= " << s1 << endl;
16 }
17 
18 int main(){
19     test();
20     system("pause");
21     return 0;
22 }

 ⑧string子串

作用:从字符串中获取指定的字串。

函数原型:string substr(int pos = 0, int n = npos) const;  //返回由pos开始的n个字符组成的字符串

人话:新的字符串名字 = 原字符串名字.substr(pos,npos);

posted @ 2022-12-24 16:57  Morning枫  阅读(28)  评论(0编辑  收藏  举报