char*是指针
string是类,类内部封装了char*,管理这个字符串,是一个char*型的容器
函数:find,copy,delete,replace,insert等
1.构造string
// string的构造方式: // 1 string() 创建一个空字符串 =string str // 2 string(const char* s) 用s初始化 // 3 string(const string& str) 拷贝构造 // 4 string(int n,char c) n个字符c初始化 #include <bits/stdc++.h> using namespace std; void test01() { string s1; // 1 默认构造 const char *str = "hello world"; string s2(str); cout << "s2= " << s2 << endl; // 2 用s初始化 这里没有const是因为str已经是常量了 string s3(s2); cout << "s3= " << s3 << endl; // 3 拷贝构造 不用const原因同2 string s4(10, 'a'); cout << "s4= " << s4 << endl; // 4 n个字符c初始化 } int main() { test01(); }
2.string的赋值
// string的赋值操作 // 1 string& operator=(const char* s);//char*类型字符串,赋值给当前字符串 // 2 string& operator=(const string &s);//把字符串s赋给当前字符串 // 3 string& operator=(char c);//字符赋给当前字符串 // 4 string& assign(const char* s);//同1 // 5 string& assign(const char* s,int n);把字符串s前n个字符赋给当前字符串 // 6 string& assign(const string &s);//同2 // 7 string& assign(int n,char c);//n个字符c赋给字符串 #include <bits/stdc++.h> using namespace std; void test01() { string str1; str1 = "hello world"; // 1 // cout<<str1;//hello world string str2 = str1; // 2 // cout<<str2;//hello world string str3; str3 = 'a'; // 3 // cout<<str3;//a string str4; str4.assign("hello c++"); // 4 // cout<<str4;//hello c++ string str5; str5.assign("hello c++", 5); // 5 // cout<<str5;//hello string str6; str6.assign(str5); // 6 // cout<<str6;//hello string str7; str7.assign(10, 'b'); // 7 cout << str7; // bbbbbbbbbb } int main() { test01(); }
3.string的拼接
// string字符串拼接:实现在字符串末尾拼接字符串 // 1 string& operator+=(const char* str)重载+=操作符 // 2 string& operator+=(const char c)重载+=操作符 // 3 string& operator+=(const string& str)重载+=操作符 // 4 string& append(const char* s)把字符串s连接到当前字符串结尾 // 5 string& append(const char* s,int n)把字符串s的前n个字符连接到当前字符串的结尾 // 6 string& append(const string &s)同3operator+=(const string& str) // 7 string& append(const string &s,int pos,int n)把字符串s中从pos开始的n个字符连接到字符串结尾 #include <bits/stdc++.h> using namespace std; void test01() { string str1 = "我"; str1 += "爱玩游戏"; // 1 // cout<<str1;//我爱玩游戏 str1 += ':'; // 2 // cout<<str1;//2我爱玩游戏: string str2 = " LOL DNF"; str1 += str2; // 3 // cout<<str1;//我爱玩游戏: LOL DNF string str3 = "I"; str3.append(" love "); // 4 // cout << str3;// I love str3.append("game abcde", 4); // 5 // cout << str3;// I love game str3.append(str2);//6 // cout<<str3;//I love game LOL DNF string str4="I love game"; str4.append(str2, 0, 4); // 7 //cout << str4;// I love game LOL string str5="I love game"; str5.append(str2, 4, 3); // 7 cout << str5;// I love game DNF } int main() { test01(); }
4.string的查找与替换
// string的查找和替换 // 1 int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找 // 2 int find(const char* s, int pos = 0) const; //查找s第一次出现位置,从pos开始查找 // 3 int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置 // 4 int find(const char c, int pos = 0) const; //查找字符c第一次出现位置 // 5 int rfind(const string& str,int pos = npos) const;//查找str最后一次位置,从pos开始查找 // 6 int rfind(const char* s, int pos = npos) const; //查找s最后一次出现位置,从pos开始查找 // 7 int rfind(const char* s, int pos, int n) const; //从pos查找s的前n个字符最后一次位置 // 8 int rfind(const char c, int pos = 0) const; //查找字符c最后一次出现位置 // 9 string& replace(int pos, int n, const string& str);//替换从pos开始n个字符为字符串str // 10 string& replace(int pos, int n,const char* s); //替换从pos开始的n个字符为字符串 /*find查找是从左往后找第一个,rfind从右往左找第一个 find找到字符串后返回查找的第一个字符位置,找不到返回-1 replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串 */ #include <bits/stdc++.h> using namespace std; // 查找 void test01() { string str1 = "abcdefgde"; cout << "1: " << str1.find("de") << endl; // 查"def"在str1的哪个位置 //3 cout << "1: " << str1.find("df") << endl; // 查"df"在str1的哪个位置 //很大的数字 or -1 cout << "5: " << str1.rfind("de") << endl; // 7 } // 替换 void test02() { string str1 = "abcdefg"; string str2 = str1.replace(1, 3, "1111"); cout << "9: " << str2; // a1111efg 不是a1111defg,因为d被覆盖 } int main() { test01(); test02(); }
5.string字符串比较
// string字符串比较 一般比较string相等 // 1 int compare(const string &s) const; //与字符串s比较 // 2 int compare(const char *s) const; //与字符串s比较 /*string字符串比较(从左往右依次比较ASCLL码) = 返回 0 > 返回 1 < 返回 -1*/ #include <bits/stdc++.h> using namespace std; // 比较 void test01() { string str1 = "hello"; string str2 = "hello"; if (str1.compare(str2) == 0) { cout << "=" << endl; //= } str2 = "zello"; if (str1.compare(str2) < 0) { cout << "<" << endl; //< } str2 = "aello"; if (str1.compare(str2) > 0) { cout << ">" << endl; //> } } int main() { test01(); }
6.string的存取
// string字符存取 // 1 char& operator[](int n);//通过[]方式取字符 // 2 char& at(int n);//通过at方式取字符 #include <bits/stdc++.h> using namespace std; // 比较 void test01() { // 访问字符 string str1 = "hello"; for (int i = 0; i < str1.size(); i++) // size返回字符串长度 { cout << str1[i] << " "; // h e l l o } cout << endl; for (int i = 0; i < str1.size(); i++) // size返回字符串长度 { cout << str1.at(i) << " "; // h e l l o } cout << endl; // 修改字符 str1[0] = 'x'; cout << str1 << endl; // xello str1.at(0) = 'y'; cout << str1 << endl; // yello } int main() { test01(); }
7.string的插入和删除
// string的插入和删除 // 1 string& insert(int pos,const char* s);//在pos位置插入字符串 // 2 string& insert(int pos,const string& s);//在pos位置插入字符串 // 3 string& insert(int pos,int n,char c);//在pos位置插入n个字符c // 4 string& erase(int pos,int n=npos);//删除从pos开始的n个字符 #include <bits/stdc++.h> using namespace std; void test01() { // 插入 string str = "hello"; str.insert(1, "111"); cout << str << endl; // h111ello str.erase(1, 3); cout << str << endl; // hello } int main() { test01(); }
8.string求字串
// string求字串 // string substr(int pos=0,int n=npos) const;返回由pos开始的n个字符串组成的字符串 #include <bits/stdc++.h> using namespace std; void test01() { string str = "abcdef"; string subStr = str.substr(1, 3); cout << subStr << endl; // bcd } // 使用操作 void test02() { string email = "zhangsan@sina.com"; // 从邮箱中获取用户名信息 int length = email.find("@"); string username = email.substr(0, length); // length=8 cout << username << endl; // zhangsan } int main() { test01(); test02(); }