C++ STL 之 string

  1 #include <iostream>
  2 #include <string>
  3 using namespace std;
  4 
  5 // 初始化
  6 void test01()
  7 {
  8     string s1;  // 调用无参构造 创建一个空的字符串
  9     string s2(10, 'c'); // 使用 n 个字符 c 初始化
 10     string s3("abcdefg"); // 使用字符串初始化
 11     string s4(s3); // 使用一个 string 对象初始化另一个 string 对象(拷贝构造)
 12     cout << s1 << endl;
 13     cout << s2 << endl;
 14     cout << s3 << endl;
 15     cout << s4 << endl;
 16     cout << "-----------------" << endl;
 17 }
 18 
 19 // 赋值操作
 20 // string& operator=(const char* s);//char*类型字符串 赋值给当前的字符串
 21 // string& operator=(const string &s);//把字符串 s 赋给当前的字符串
 22 // string& operator=(char c);//字符赋值给当前的字符串
 23 // string& assign(const char *s);//把字符串 s 赋给当前的字符串
 24 // string& assign(const char *s, int n);//把字符串 s 的前 n 个字符赋给当前的字符串
 25 // string& assign(const string &s);//把字符串 s 赋给当前字符串
 26 // string& assign(int n, char c);//用 n 个字符 c 赋给当前字符串
 27 // string& assign(const string &s, int start, int n);//将 s 从 start 开始 n 个字符赋值给字符串
 28 void test02()
 29 {
 30     string s1;
 31     string s2("appp");
 32     s1 = "abcdef";
 33     cout << s1 << endl;
 34     s1 = s2;
 35     cout << s1 << endl;
 36     s1 = 'a';
 37     cout << s1 << endl;
 38     // 成员方法assign
 39     s1.assign("jkl");
 40     cout << s1 << endl;
 41     cout << "-----------------" << endl;
 42     
 43 }
 44 
 45 // 取值操作
 46 void test03()
 47 {
 48     string s1 = "abcdefg";
 49     // 重载[]操作符
 50     for (int i = 0; i < s1.size(); i++)
 51     {
 52         cout << s1[i] << " ";
 53     }
 54     cout << endl;
 55     // at成员函数
 56     for (int i = 0; i < s1.size(); i++)
 57     {
 58         cout << s1.at(i) << " ";
 59     }
 60     cout << endl;
 61     try
 62     {
 63         // cout << s1[100] << endl;
 64         cout << s1.at(100) << endl;
 65     }
 66     catch (...)
 67     {
 68         cout << "越界" << endl;
 69     }
 70     cout << "-----------------" << endl;
 71     // 区别:[]方式如果访问越界,就直接挂了
 72     // at方式 访问越界会抛出异常out_of_range
 73 }
 74 
 75 // 拼接操作
 76 // string& operator+=(const string& str);//重载+=操作符
 77 // string& operator+=(const char* str);//重载+=操作符
 78 // string& operator+=(const char c);//重载+=操作符
 79 // string& append(const char *s);//把字符串 s 连接到当前字符串结尾
 80 // string& append(const char *s, int n);//把字符串 s 的前 n 个字符连接到当前字符串结尾
 81 // string& append(const string &s);//同 operator+=()
 82 // string& append(const string &s, int pos, int n);//把字符串 s 中从 pos 开始的 n 个字符连接到当前字符串结尾
 83 // string& append(int n, char c);//在当前字符串结尾添加 n 个字符 c
 84 void test04()
 85 {
 86     string s = "abcd";
 87     string s2 = "1111";
 88     s += "abcd";
 89     s += s2;
 90     cout << s << endl;
 91     string s3 = "2222";
 92     s2.append(s3);
 93     cout << s2 << endl;
 94     string s4 = s2 + s3;
 95     cout << s4 << endl;
 96     cout << "-----------------" << endl;
 97 }
 98 
 99 // 查找操作
100 // int find(const string& str, int pos = 0) const; //查找 str 第一次出现位置,从 pos 开始查找
101 // int find(const char* s, int pos = 0) const; //查找 s 第一次出现位置,从 pos 开始查找
102 // int find(const char* s, int pos, int n) const; //从 pos 位置查找 s 的前 n 个字符第一次位置
103 // int find(const char c, int pos = 0) const; //查找字符 c 第一次出现位置
104 // int rfind(const string& str, int pos = npos) const;//查找 str 最后一次位置,从 pos 开始查找
105 // int rfind(const char* s, int pos = npos) const;//查找 s 最后一次出现位置,从 pos 开始查找
106 // int rfind(const char* s, int pos, int n) const;//从 pos 查找 s 的前 n 个字符最后一次位置
107 // int rfind(const char c, int pos = 0) const; //查找字符 c 最后一次出现位置
108 void test05()
109 {
110     string s = "abcdefgffffghijkl";
111     // 查找第一次出现的位置
112     int pos = s.find("fg");
113     cout << "pos: " << pos << endl;
114     // 查找最后一次出现的位置
115     pos = s.rfind("fg");
116     cout << "pos: " << pos << endl;
117     cout << "-----------------" << endl;
118 }
119 
120 // string替换
121 // string& replace(int pos, int n, const string& str); //替换从 pos 开始 n 个字符为字符串 str
122 // string& replace(int pos, int n, const char* s); //替换从 pos 开始的 n 个字符为字符串 s
123 void test06()
124 {
125     string s = "abcdefg";
126     s.replace(0, 2, "111");
127     cout << s << endl;
128     cout << "-----------------" << endl;
129 }
130 
131 // string 比较
132 /* compare 函数在>时返回 1,<时返回 -1,==时返回 0。比较区分大小写,比较时参考字典顺序,排越前面的越小。大写的 A 比小写的 a 小。 */
133 // int compare(const string &s) const; //与字符串 s 比较
134 // int compare(const char *s) const;//与字符串 s 比较
135 void test07()
136 {
137     string s1 = "abcd";
138     string s2 = "abce";
139     if (s1.compare(s2) == 0)
140     {
141         cout << "字符串相等!" << endl;
142     }
143     else
144     {
145         cout << "字符串不相等!" << endl;
146     }
147     cout << "-----------------" << endl;
148 }
149 
150 // 子串操作
151 // string substr(int pos = 0, int n = npos) const;//返回由 pos 开始的 n 个字符组成的字符串
152 void test08()
153 {
154     string s = "abcdefg";
155     string mySubstr = s.substr(1, 3);
156     cout << mySubstr << endl;
157     cout << "-----------------" << endl;
158 }
159 
160 // 插入和删除
161 // string& insert(int pos, const char* s); //插入字符串
162 // string& insert(int pos, const string& str); //插入字符串
163 // string& insert(int pos, int n, char c);//在指定位置插入 n 个字符c
164 // string& erase(int pos, int n = npos);//删除从 Pos 开始的 n 个字符
165 void test09()
166 {
167     string s = "abcdefg";
168     s.insert(3, "111");
169     cout << s << endl;
170     s.erase(0, 2);
171     cout << s << endl;
172 }
173 
174 int main()
175 {
176     test01();
177     test02();
178     test03();
179     test04();
180     test05();
181     test06();
182     test07();
183     test08();
184     test09();
185     getchar();
186     return 0;
187 }

 

1 //string 转 char*
2 string str = "itcast";
3 const char* cstr = str.c_str();
4 //char* 转 string
5 char* s = "itcast";
6 string sstr(s);

 

posted @ 2019-05-20 20:17  李道臣  阅读(513)  评论(0)    收藏  举报