String的使用:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> using namespace std; //1. 字符串构造 /* string();//创建一个空的字符串 例如: string str; string(const string& str);//使用一个string对象初始化另一个string对象 string(const char* s);//使用字符串s初始化 string(int n, char c);//使用n个字符c初始化 */ void test01(){ string s1; string s2(10, 'a'); string s3(s2); string s4("hello wolrd!"); cout << s2 << endl; cout << s3 << endl; cout << s4 << endl; } //2. 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);//把字符串s的前n个字符赋给当前的字符串 string& assign(const string &s);//把字符串s赋给当前字符串 string& assign(int n, char c);//用n个字符c赋给当前字符串 string& assign(const string &s, int start, int n);//将s从start开始n个字符赋值给字符串 */ void test02(){ string s1; s1 = "hello world!"; cout << s1 << endl; string s2; //s2.assign(s1); s2.assign("hello obama!"); cout << s2 << endl; } //3. string存取字符操作 /* char& operator[](int n);//通过[]方式取字符 char& at(int n);//通过at方法获取字符 */ void test03(){ string s = "hello world!"; for (int i = 0; i < s.size(); i ++){ cout << s[i] << " "; } cout << endl; for (int i = 0; i < s.size(); i++){ cout << s.at(i) << " "; } cout << endl; //[]访问越界不抛异常,直接挂掉。at越界了,会抛出异常。 try{ //cout << s[100] << endl; cout << s.at(100) << endl; } catch (out_of_range &ex){ cout << ex.what() << endl; cout << "捕获异常!" << endl; } } //4. string拼接操作 /* string& operator+=(const string& str);//重载+=操作符 string& operator+=(const char* str);//重载+=操作符 string& operator+=(const char c);//重载+=操作符 string& append(const char *s);//把字符串s连接到当前字符串结尾 string& append(const char *s, int n);//把字符串s的前n个字符连接到当前字符串结尾 string& append(const string &s);//同operator+=() string& append(const string &s, int pos, int n);//把字符串s中从pos开始的n个字符连接到当前字符串结尾 string& append(int n, char c);//在当前字符串结尾添加n个字符c */ void test04(){ string s1 = "aaa"; s1 += "bbb"; s1 += 'c'; cout << s1 << endl; s1.append("ddddd",3); cout << s1 << endl; } //5. string查找和替换 /* int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找 int find(const char* s, int pos = 0) const; //查找s第一次出现位置,从pos开始查找 int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置 int find(const char c, int pos = 0) const; //查找字符c第一次出现位置 int rfind(const string& str, int pos = npos) const;//查找str最后一次位置,从pos开始查找 int rfind(const char* s, int pos = npos) const;//查找s最后一次出现位置,从pos开始查找 int rfind(const char* s, int pos, int n) const;//从pos查找s的前n个字符最后一次位置 int rfind(const char c, int pos = 0) const; //查找字符c最后一次出现位置 string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str string& replace(int pos, int n, const char* s); //替换从pos开始的n个字符为字符串s */ void test05(){ string s = "abcdefgd"; cout << s.find('d') << endl; cout << s.rfind('d') << endl; s.replace(2, 3, "AAA"); cout << s << endl; } //6. string比较操作 /* int compare(const string &s) const;//与字符串s比较 int compare(const char *s) const;//与字符串s比较 */ void test06(){ string s1 = "hello"; string s2 = "hello"; const char *str = "world"; if (s1.compare(s2) == 0){ cout << "s1 == s2!" << endl; } if (s2.compare(str) == 0){ cout << "s1 == str!" << endl; } } //7. string子串 /* string substr(int pos = 0, int n = npos) const;//返回由pos开始的n个字符组成的字符串 */ void test07(){ string email = "hello world@gmail.com"; int pos = email.find('@'); string username = email.substr(0,pos); cout << username << endl; string prex = email.substr(pos + 1); cout << prex << endl; } //8. 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个字符 */ void test08(){ string s = "aaaa"; s.insert(3, "AAAA"); cout << s << endl; s.insert(3, 5, 'M'); cout << s << endl; s.erase(2, 3); cout << s << endl; } //9. string和c-style字符串转换 void test09(){ const char *str = "hello wolrd!"; //const char * -> string string s(str); cout << str << endl; //string -> const char * const char *s2 = s.c_str(); cout << s2 << endl; } //10. 字符串的内存被重新分配之后,可能发生错误. void test10(){ //[]和at函数返回都是引用 string s = "abcde"; char &a = s[2]; char &b = s[3]; a = '1'; b = '2'; cout << "a:" << a << endl; cout << "b:" << b << endl; cout << s << endl; cout << "字符串原空间地址:" << (int *)s.c_str() << endl; s = "123456789abcdefg"; cout << "字符串原空间地址:" << (int *)s.c_str() << endl; //字符串在字符串操作过程中,可能会导致重新分配内存,之前引用的内存就会失效。 a = '3'; } //11. 迭代器遍历字符串 void test11(){ string s = "hello world!"; for (string::iterator it = s.begin(); it != s.end(); ++it){ cout << *it << " "; } cout << endl; for (string::reverse_iterator it = s.rbegin(); it != s.rend(); ++it){ cout << *it << " "; } cout << endl; } int main(){ //test01(); //test02(); //test03(); //test04(); //test05(); //test06(); //test07(); //test08(); //test09(); //test10(); test11(); system("pause"); return EXIT_SUCCESS; }