?個人主頁:?熬夜學編程的小林
💗系列專欄:?【C語言詳解】?【數據結構詳解】【C++詳解】
目錄
1、標準庫中的string類
1.1、string類的常用接口說明
?1.1.1、string類對象的修改操作?
?1.1.2、string類對象非成員函數重載
總結
1、標準庫中的string類
1.1、string類的常用接口說明
?1.1.1、string類對象的修改操作?
?? ?1、 push_back(char c) //尾插一個字符
?? ?2、 string& append(const string & str);//在字符串尾追加一個string類字符串
?? ?3、 string& append(const char* s);//在字符串尾追加一個常量字符串
?? ?4、 string& operator+= (const string & str);//在字符串尾追加一個string類字符串
?? ?5、 string& operator+= (const char* s);//在字符串尾追加一個常量字符串
?? ?6、 string& assign(const string & str);//把原來string類字符串替換成str類
?? ?7、 string& assign(const char* s);//把原來string類字符串替換成常量字符串
?? ?8、 string& insert(size_t pos, const string & str);//在pos位置插入類字符串
?? ?9、 string& insert(size_t pos, const char* s);//在pos位置插入常量字符串
?? ?10、string& erase (size_t pos = 0, size_t len = npos);//從pos位置刪除len長度個字符,超過類大小則刪除所有有效字符
?? ?11、string& replace (size_t pos, ?size_t len, ?const string& str);//將原類的pos位置向后len個長度替換成str類
?? ?12、string& replace (size_t pos, ?size_t len, ?const char* s);//將原類的pos位置向后len個長度替換成常量字符串
?? ?13、void swap(string & str);//將原類與str類交換數據
?? ?14、void pop_back();//尾刪一個字符
注意:關于字符串修改的重載函數實在太多了,因此只舉例了常見的函數進行使用。
int main()
{string s1;string s2("hello");s1.push_back('a');//在s1尾部插入字符as1.push_back('b');//在s1尾部插入字符bs1.push_back('c');//在s1尾部插入字符ccout << s1 << endl;//打印s1s1.append(s2);//在s1尾部追加string類s2cout << s1 << endl;s1.append("world");//在s1尾部追加world字符串cout << s1 << endl;s1 += s2;//在s1尾部追加string類s2cout << s1 << endl;s1 += "world";//在s1尾部追加world字符串cout << s1 << endl;s1.assign(s2);//將s1原來的字符替換成s2cout << s1 << endl;s1.assign("world");//將s1原來的字符替換成worldcout << s1 << endl;s1.insert(2, s2);//在2的位置插入string類s2cout << s1 << endl;s1.insert(3, "world");//在3的位置插入字符串worldcout << s1 << endl;s1.erase(2, 3);//從2的位置刪除3個字符cout << s1 << endl;s1.replace(0, 4, s2);//從0的位置開始把4個位置替換成s2cout << s1 << endl;s1.replace(2, 3, "world");//從2的位置開始把3個位置替換worldcout << s1 << endl;cout << s2 << endl;s1.swap(s2);//將s1與s2數據交換cout << s1 << endl;cout << s2 << endl;s1.pop_back();//尾刪一個字符cout << s1 << endl;return 0;
}
1.1.1、string類對象的字符串操作?
? ? 1、 const char* c_str() const;//獲取C格式常量字符串
?? ?2、 size_t find (const string& str, size_t pos = 0) const;//從pos位置開始從前往后找與str相等的字符串,相等則返回該串第一個元素下標,否則返回npos
?? ?3、 size_t find(const char* s, size_t pos = 0) const;//從pos位置開始從前往后找與s相等的字符串,相等則返回該串第一個元素下標,否則返回npos
?? ?4、 size_t rfind (const string& str, size_t pos = npos) const;//從pos位置開始從后往前找與str相等的字符串,相等則返回該串第一個元素下標,否則返回npos
?? ?5、 size_t rfind(const char* s, size_t pos = npos) const;//從pos位置開始從后往前找與s相等的字符串,相等則返回該串第一個元素下標,否則返回npos
?? ?6、 size_t find_first_of(const string & str, size_t pos = 0) const;//從pos位置開始從前往后找與str其中一個字符相等的元素,找到則返回此元素下標,否則返回npos
?? ?7、 size_t find_first_of(const char* s, size_t pos = 0) const;//從pos位置開始從前往后找與s其中一個字符相等的元素,找到則返回此元素元素下標,否則返回npos
?? ?8、 size_t find_last_of(const string & str, size_t pos = npos) const;//從pos位置開始從后往前找與str其中一個字符相等的元素,找到則返回此元素下標,否則返回npos
?? ?9、 size_t find_last_of(const char* s, size_t pos = npos) const;//從pos位置開始從后往前找與s其中一個字符相等的元素,找到則返回此元素下標,否則返回npos
?? ?10、size_t find_first_not_of (const string& str, size_t pos = 0) const;//從pos位置開始從前往后找與str中字符都不相等的元素,找到則返回此元素下標,否則返回npos
?? ?11、size_t find_first_not_of(const char* s, size_t pos = 0) const;//從pos位置開始從前往后找與s中字符都不相等的元素,找到則返回此元素下標,否則返回npos
?? ?12、size_t find_last_not_of (const string& str, size_t pos = npos) const;//從pos位置開始從后往前找與str中字符都不相等的元素,找到則返回此元素下標,否則返回npos
?? ?13、size_t find_last_not_of(const char* s, size_t pos = npos) const;//從pos位置開始從后往前找與s中字符都不相等的元素,找到則返回此元素下標,否則返回npos
?? ?14、string substr (size_t pos = 0, size_t len = npos) const;//從pos位置截取len長度的子串
int main()
{string s("hello world");const char* str = s.c_str();//將C格式字符串賦值給strcout << str << endl;//打印str字符串string s1(":");string s2;const char* str1 = ":";string url("https://cplusplus.com/reference/string/string/");size_t pos1 = url.find(s1, 0);//從0位置開始從前往后找與s1相等的字符串cout << pos1 << endl;s2 = url.substr(0, pos1);//從0位置截取pos1長度的子串cout << s2 << endl;//打印上面子串size_t pos2 = url.find(str1, 0);//從0位置開始從前往后找與str1相等的字符串cout << pos2 << endl;s2 = url.substr(0, pos2);//從0位置截取pos2長度的子串cout << s2 << endl;//打印上面子串string s3 = "code.c.dir.exe";size_t pos3 = s3.rfind(".");//從npos位置開始從后往前找與.相等的字符cout << pos3 << endl;s2 = s3.substr(pos3);//從pos位置截取字符串cout << s2 << endl;//打印上面子串string s4 = "abcdef";cout << s4 << endl;//打印初始s4//將aeiou的字符均填充成*size_t pos4 = s4.find_first_of("aeiou", 0);//從0位置開始從前往后找與"aeiou"其中一個字符相等的元素while (pos4 != string::npos){s4[pos4] = '*';pos4 = s4.find_first_of("aeiou", pos4 + 1);}cout << s4 << endl;//打印填充后的s4return 0;
}
上述代碼輸出結果:?
注意:標準庫中的npos源代碼為:static const size_t npos = -1;
?1.1.2、string類對象非成員函數重載
?? ?1、string operator+ (const string& lhs, const string& rhs);//在lhs尾部追加rhs字符串
?? ?2、string operator+ (const char* ? lhs, const string& rhs);//在rhs尾部追加lhs字符串
? ? 3、bool operator== (const string& lhs, const string& rhs);//比較lhs與rhs字符串,逐個字符比較
?? ?4、bool operator== (const char* ? lhs, const string& rhs);//比較lhs與rhs字符串,逐個字符比較
?? ?5、void swap (string& x, string& y);//將x字符串與y字符串交換,此處思想為交換指針
?? ?6、istream& operator>> (istream& is, string& str);//輸入運算符重載
?? ?7、ostream& operator<< (ostream& os, const string& str);//輸出運算符重載
?? ?8、istream& getline(istream & is, string & str);//獲取一行字符串
int main()
{string s1("hello");const char* str = "world";string s2;s2 = s1 + str;//類字符串+C常量字符串,傳值返回盡量少用cout << s2 << endl;//輸出運算符重載s2 = str + s1;//C常量字符串+類字符串cout << s2 << endl;string s3 = "hello";const char* str3 = "hello";cout << (s3 == str3) << endl;//左邊類字符串 右邊C格式字符串cout << (str3 == s3) << endl;cout << (s3 < str3) << endl;string s4 = "world";cout << s3 << endl;cout << s4 << endl;swap(s3, s4);//交換s3與s4,C++標準庫有swap函數,此處還有不會出錯?根據模板的規則,有現成的用現成的,因此沒問題。string s5;//cin >> s5;//輸入字符串給s5//cout << s5 << endl;getline(cin, s5);//獲取一行字符串cout << s5 << endl;return 0;
}
?
總結
本篇博客就結束啦,謝謝大家的觀看,如果公主少年們有好的建議可以留言喔,謝謝大家啦!