C++ 提高编程 STL常用容器-string容器
#include<iostream> using namespace std; #include<string> //string的构造函数 // //* `string(); ` //创建一个空的字符串 例如: string str; //`string(const char* s); ` //使用字符串s初始化 //* `string(const string& str); ` //使用一个string对象初始化另一个string对象 //* `string(int n, char c); ` //使用n个字符c初始化 void test01() { string s1;//默认构造 const char* str = "hello world"; string s2(str); cout << "s2= " << s2 << endl; string s3(s2); cout << "s3= " << s3 << endl; string s4(10,'a'); cout << "s4= " << s4 << endl; } int main() { test01(); system("pause"); return 0; }
#include<iostream> using namespace std; #include<string> //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赋给当前字符串 void test01() { string str1; str1 = "hello world"; cout << "str1=" << str1 << endl; string str2; str2 = str1; cout << "str2=" << str2<< endl; string str3; str3 = 'a'; cout << "str3=" << str3 << endl; string str4; str4.assign("hello C++"); cout << "str4=" << str4 << endl; string str5; str5.assign("hello C++",5); cout << "str5=" << str5 << endl; string str6; str6.assign(str5); cout << "str6=" << str6 << endl; string str7; str7.assign(10,'w'); cout << "str7=" << str7 << endl; } int main() { test01(); system("pause"); return 0; }
#include<iostream> using namespace std; #include<string> //字符串拼接 //* `string& operator+=(const char* str); ` //重载+=操作符 //* `string& operator+=(const char 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); ` //同operator+=(const string& str) //* `string& append(const string &s, int pos, int n); `/ / 字符串s中从pos开始的n个字符连接到字符串结尾 void test01() { string str1 = "我"; str1 += "爱玩游戏"; cout << "str1=" << str1 << endl; str1 += ':'; cout << "str1=" << str1 << endl; string str2 = "LOL DNF"; str1 += str2; cout << "str1=" << str1 << endl; string str3 = "I"; str3.append("love"); cout << "str3=" << str3 << endl; str3.append(" game abcde",4); cout << "str3=" << str3 << endl; str3.append(str2); cout << "str3=" << str3 << endl; str3.append(str2,0,3); cout << "str3=" << str3 << endl; } int main() { test01(); system("pause"); return 0; }
```C++ //查找和替换 void test01() { //查找 string str1 = "abcdefgde"; int pos = str1.find("de"); if (pos == -1) { cout << "未找到" << endl; } else { cout << "pos = " << pos << endl; } pos = str1.rfind("de"); cout << "pos = " << pos << endl; } void test02() { //替换 string str1 = "abcdefgde"; str1.replace(1, 3, "1111"); cout << "str1 = " << str1 << endl; } int main() { //test01(); //test02(); system("pause"); return 0; } ``` 总结: * find查找是从左往后,rfind从右往左 * find找到字符串后返回查找的第一个字符位置,找不到返回-1 * replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串
//字符串比较 void test01() { string s1 = "hello"; string s2 = "aello"; int ret = s1.compare(s2); if (ret == 0) { cout << "s1 等于 s2" << endl; } else if (ret > 0) { cout << "s1 大于 s2" << endl; } else { cout << "s1 小于 s2" << endl; } } int main() { test01(); system("pause"); return 0; } ``` 总结:字符串对比主要是用于比较两个字符串是否相等,判断谁大谁小的意义并不是很大
```C++ void test01() { string str = "hello world"; for (int i = 0; i < str.size(); i++) { cout << str[i] << " "; } cout << endl; for (int i = 0; i < str.size(); i++) { cout << str.at(i) << " "; } cout << endl; //字符修改 str[0] = 'x'; str.at(1) = 'x'; cout << str << endl; } int main() { test01(); system("pause"); return 0; } ``` 总结:string字符串中单个字符存取有两种方式,利用 [ ] 或 at
#### 3.1.8 string插入和删除 **功能描述:** * 对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个字符 **示例:** ```C++ //字符串插入和删除 void test01() { string str = "hello"; str.insert(1, "111"); cout << str << endl; str.erase(1, 3); //从1号位置开始3个字符 cout << str << endl; } int main() { test01(); system("pause"); return 0; } ``` **总结:**插入和删除的起始下标都是从0开始 #### 3.1.9 string子串 **功能描述:** * 从字符串中获取想要的子串 **函数原型:** * `string substr(int pos = 0, int n = npos) const;` //返回由pos开始的n个字符组成的字符串 **示例:** ```C++ //子串 void test01() { string str = "abcdefg"; string subStr = str.substr(1, 3); cout << "subStr = " << subStr << endl; string email = "hello@sina.com"; int pos = email.find("@"); string username = email.substr(0, pos); cout << "username: " << username << endl; } int main() { test01(); system("pause"); return 0; } ``` **总结:**灵活的运用求子串功能,可以在实际开发中获取有效的信息