1 /***
2 * string 基础api复习
3 * 8 AUG 2018
4 */
5
6 #include <iostream>
7 #include <string>
8 using namespace std;
9
10 void print(string str, int index)
11 {
12 std::cout << "str" << index << " = " << str << std::endl;
13 }
14
15 int main()
16 {
17 // string对象初始化
18 string str0("i am a boy~");
19 string str1 = "hello world!";
20 string str2(str1);
21 string str3(5, 'c');
22 string str4(str1, 2, 3); // 从【2】索引起始,长度为3的字符串
23
24 print(str0, 0);
25 print(str1, 1);
26 print(str2, 2);
27 print(str3, 3);
28 print(str4, 4);
29
30 // string相关简单函数
31 bool power;
32 int str_len;
33 char te_ch;
34 string te_str;
35 power = str0.empty(); // 判断字符串是否为空
36 std::cout << "power = " << power << std::endl;
37 str_len = str1.size(); // 字符串长度
38 std::cout << "str_len = " << str_len << std::endl;
39 te_ch = str2[4]; // 返回字符串的第n个字符,下标从0开始
40 std::cout << "str2[4] = " << te_ch << std::endl;
41 te_ch = str2.at(4); // 返回字符串的第n个字符,下标从0开始,同上
42 std::cout << "str2.at(4) = " << te_ch << std::endl;
43 te_str = str1 + str0; // 连接两个字符串变成一个新的字符串
44 std::cout << "str1 + str0 = " << te_str << std::endl;
45 te_str = str3; // 替换字符串
46 std::cout << "te_str = " << te_str << std::endl;
47 te_str.append(str0); // 追加字符串
48 std::cout << "te_str = " << te_str << std::endl;
49 te_str.assign(str0); // 为字符串对象赋值
50 std::cout << "te_str = " << te_str << std::endl;
51
52 // str.begin()&&str.end()均为迭代器
53 string::iterator it = str0.begin(); // 字符串迭代器,类似指针
54 std::cout << "it = " << (*it) << std::endl;
55
56 // string::c_str()
57 char* char_str = new char[strlen(str0.c_str()) + 1];
58 strcpy(char_str, str0.c_str()); // 当需要将字符串转成const char*时,用c_str(意味着转换成C语音的方式)
59 std::cout << "char_str = " << char_str << std::endl;
60 delete []char_str;
61 char_str = NULL;
62
63 // string::erase(),注意,erase后迭代器自动指向后一个位置
64 str0.erase(5, 2); // 从index值为5.删除长度为4个字符
65 std::cout << "str0.erase(5, 2) = " << str0 << std::endl;
66 str0.erase(str0.begin() + 2); // 删除index值为2的字符
67 std::cout << "str0.erase(str0.begin() + 2) = " << str0 << std::endl;
68 str0.erase(str0.begin() + 2, str0.end() - 1); // 从index值为2,删除到index末尾减一
69 std::cout << "str0.erase(str0.begin() + 2) = " << str0 << std::endl;
70
71 // string::find()
72 std::size_t found = str1.find(str4, 0); // 从str1中找str4第一次出现的地方
73 if (found != string::npos)
74 std::cout << "first found is " << found << std::endl;
75 found = str1.find('o'); // 从str1中找o第一次出现的地方
76 if (found != string::npos)
77 std::cout << "first found is " << found << std::endl;
78 found = str1.find("world"); // 从str1中找world第一次出现的地方
79 if (found != string::npos)
80 std::cout << "first found is " << found << std::endl;
81
82 // string::insert()
83 str0.insert(1, " love"); // 在str0的index值为1后插入 love
84 print(str0, 0);
85 str0.insert(6, " you", 0, 3); // 在str0的index值为6后插入 you中从index值为0到长度为3的字符串
86 print(str0, 0);
87 str0.insert(0, str1); // 在str0的index值为0后插入str1
88 print(str0, 0);
89
90 // string::length()与string::size()用法相同,值也一样
91 std::cout << "str0.length() = " << str0.length() << " str0.size() = " << str0.size() << std::endl;
92
93 // string::maxsize()返回能够存储字符串的最大长度
94 std::cout << "str0.max_size() = " << str0.max_size() << std::endl;
95
96 // string::rbegin()和string::rend()逆向迭代器
97 for (string::reverse_iterator it = str0.rbegin(); it != str0.rend(); it++)
98 {
99 std::cout << (*it);
100 }
101 std::cout << std::endl;
102 print(str0, 0);
103
104 // 这个是algorithm里面的,混入是为了对比效果
105 reverse(str0.begin(), str0.end());
106 print(str0, 0);
107
108 // string::replace()用法类似string::insert()
109 str0.replace(5, 3, "ni hao", 2, 4);
110 print(str0, 0);
111
112 // string::substr()
113 te_str = str0.substr(5, 3);
114 std::cout << "te_str = " << te_str << std::endl;
115
116 // string::swap()
117 te_str.swap(str0);
118 print(str0, 0);
119 std::cout << "te_str = " << te_str << std::endl;
120
121 while (true)
122 {
123 getchar();
124 }
125 return 0;
126 }