一文搞懂C++中string容器的構(gòu)造及使用
string容器
string基本概念
本質(zhì):
string是c++風(fēng)格的字符串,不同于c語言的 char*,他本質(zhì)是一個類
string 和 char*的區(qū)別:
char*是一個指針
string是一個類,類內(nèi)部封裝了char*來管理字符串,是一個char&型的容器
特點:
strint類內(nèi)部封裝了很多成員方法
例如:查找find,拷貝copy,刪除delete,替換replace,插入insert
string管理char*所分配的內(nèi)存,不用考慮賦值越界和取值越界等問題,由類內(nèi)部進行負責(zé)
string構(gòu)造函數(shù)
四種函數(shù)原型
- string()創(chuàng)建一個空的字符串
- string(const char* s)使用字符串s初始化
- string(const string& str)使用一個string對象初始化另一個string對象
- string(int n,char c)使用n個字符c初始化
使用示例:
//string的構(gòu)造函數(shù) void test1() { string s1;//默認(rèn)構(gòu)造 const char* str = "葉落 秋白"; string s2(str); cout << "s2:"<<s2 << endl; string s3(s2); cout << "s3" << s3 << endl; string s4(6,'a'); }
上面就是四個構(gòu)造方法對應(yīng)的舉例了,第一種方式是我們頻繁使用的;第二種方式就是設(shè)置不可變字符數(shù)組傳入構(gòu)造來初始化;第三種方式理解為調(diào)用拷貝構(gòu)造即可;第四種方式就比較有意思了,在上面代碼里的意思就是用6個'a'來初始化字符串,輸入s4結(jié)果為:aaaaaa。
string賦值操作
給string字符串賦值
賦值的函數(shù)原型:
- string& operator = (const char* s)char*類型字符串 賦值給當(dāng)前的字符串
- string& operator = (const string &s)把字符串s賦給當(dāng)前的字符串
- string& operator = (char c)把字符賦值給當(dāng)前的字符串
- string& assign(const char* s)把字符串s賦值給當(dāng)前的字符串
- string& assign(const char*s,int n)把字符串s的當(dāng)前n個字符賦給當(dāng)前的字符串
- string& assign(const string &s)把字符串s賦給當(dāng)前字符串
- string& assign(int n,char c)用n個字符c賦給當(dāng)前字符串
使用示例:
void test2() { string str1; str1 = "葉落秋白"; cout << "str1=" << str1 << endl; string str2; str2 = str1; cout << "str2=" << str2 << endl; string str3; str3 = 'c'; 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(6, 'w'); cout << "str7=" << str7 << endl; }
tips:stirng賦值方法很多,但是重載的operator=的方式最為常用
string拼接操作
在字符串末尾拼接字符串
函數(shù)原型:
- string& operator+=(const char* str)重載+=操作符
- string& operator+=(const char c)重載+=操作符
- string& operator+=(const string& str)重載+=操作符
- string& append(const char* s)把字符串s連接到當(dāng)前字符串結(jié)尾
- string& append(const char* s,int n)把字符串s的前n個字符連接到當(dāng)前字符串的結(jié)尾
- string& append(const string &s)同operator+=(const string& str)
- string& append(const string &s,int pos,int n)把字符串s中從pos開始的n個字符連接到字符串結(jié)尾
使用示例:
void test3() { string str1 = "紅豆"; str1 += "憶相思"; cout << "str1=" << str1<< endl; str1 += '?'; cout << "str1=" << str1 << endl; string str2 = "yyds"; str1 += str2; cout << "str1=" << str1 << endl; string str3 = "You"; str3.append("low"); cout << "str3=" << str3 << endl; str3.append("wuwuwu qaq", 4); cout << "str3=" << str3 << endl; str3.append(str2); cout << "str3=" << str3 << endl; str3.append(str2, 0, 1); cout << "str3=" << str3 << endl; }
tips:初學(xué)者只需要稍微記幾個拼接函數(shù)即可
string查找替換
指定位置查找字符串
指定位置刪除字符串
函數(shù)原型:
1.查找s第一次出現(xiàn)位置,從pos開始查找
int find(const string& str, int pos = 0) const;
int find(const char* s , int pos ==0) const;
2.從pos位置查找s的前n個字符第一次位置
int find( const char* s, int pos, int n) const;
3.查找字符c第一次出現(xiàn)位置
int find(const char c, int pos = e) const;
4.查找str最后一次位置,從pos開始查找
int rfind(const string& str, int pos = npos) const;
5.查找str最后一次位置,從pos開始查找,計數(shù)永遠是從前往后
int rfind(const char* s, int pos = npos) const;
6.從pos查找s的前n個字符最后一次位置
int rfind(const char* s, int pos, int n) const;
7.查找字符c最后一次出現(xiàn)位置
int rfind(const char c, int pos - e) const;
8.替換從pos開始n個字符為字符串str
string& replace(int pos, int n, const string& str);
9.替換從pos開始的n個字符為字符串s
string& replace(int pos, int n,const char* s );
使用示例:
//字符串的查找和替換 //查找 void test4() { string str1 = "abcdefgh"; //找到返回下標(biāo),找不到返回-1 int pos1 = str1.find("def"); cout << "pos1=" << pos1 << endl; int pos2 = str1.find("s"); cout << "pos2=" << pos2<< endl; pos1 = str1.rfind("ab");//從右往左找到第一個出現(xiàn),從左往右計數(shù) cout << "pos1=" << pos1 << endl;; } //替換 void test5() { string str2 = "abcdef"; str2.replace(1, 2, "1111");//從1號位置起,2個字符替換為1111 cout << "str2=" << str2 << endl; }
tips:
find找到字符串后返回查找的第一個字符位置,找不到返回1
函數(shù)雖然很多,但幾乎都是兩個版本的,一個是c++風(fēng)格一個c語言風(fēng)格
string字符串比較
字符串比較是按字符的ASCII碼進行對比
函數(shù)原型:
int compare(const string &s) const; int compare(const char* s) const;
使用示例:
string str1 = “zello”; string str2 = “hello”; if (str1.compare(str2) == 0) { cout << “相等” << endl; } else if (str1.compare(str2) > 0) { cout << “str1大” << endl; } else { cout << “str2大” << endl; }
tips:字符串對比的目的是比較兩個字符串是否相等,判斷誰大誰小的意義并不是很大。
string字符讀取
單個字符存取有兩種方式:
函數(shù)原型:
char& operator[] (int n); //通過[]獲取字符 char& at (int n); //通過at方法獲取字符
使用示例:
string str1 = “hello”; //通過[]訪問單個字符 for (int i = 0; i < str1.size(); i++) { cout << str1[i] << " "; } cout << endl; //通過at方式訪問的單個字符 for (int i = 0; i < str1.size(); i++) { cout << str1.at(i) << " "; } cout << endl; //修改單個字符 str1[0] = ‘z'; cout << str1 << endl; str1.at(0) = ‘x'; cout << str1 << endl;
string插入和刪除
函數(shù)原型:
string& insert(int pos,const cahr* s);//在n位置插入字符串 string& insert(int pos,const string& s);//在n位置插入字符串 string& insert(int pos,int n,char c);//在指定位置插入n個字符c string& erase(int pos,int n = npos);//刪除從pos位置開始的n個字符
使用示例:
string str = “hello”; //插入 str.insert(1, “111”); cout << "str = " << str << endl; //刪除 str.erase(1,3); cout << "str = " << str << endl;
tips:插入和刪除的起始下標(biāo)都是從0開始。
string求子串
從字符串中得到想要的子串
函數(shù)原型:
string substr(int pos=0,int n=npos) const ;//返回由pos位置開始的由n個字符組成的字符串
//string求子串 void test01() { string str = "abcdef"; string subStr = str.substr(1, 3); cout << "subStr=" << subStr << endl; } //使用操作 void test02() { string email = "ylqb@qq.com"; //從郵箱地址中獲取用戶名信息 int pos = email.find("@"); string usrName = email.substr(0, pos); cout << usrName << endl; }
tips:靈活的運用求子串功能,可以在實際開發(fā)中獲取有效的信息,在上述代碼中就可以有效獲取到不同郵箱中的用戶名。
到此這篇關(guān)于一文搞懂C++中string容器的構(gòu)造及使用的文章就介紹到這了,更多相關(guān)C++ string容器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++:構(gòu)造函數(shù),析構(gòu)函數(shù)詳解
今天小編就為大家分享一篇關(guān)于C++構(gòu)造函數(shù)和析構(gòu)函數(shù)的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2021-09-09C++實現(xiàn)字符串類型相互轉(zhuǎn)換的代碼示例
在C/C++編程中,字符串是非常基礎(chǔ)且常用的數(shù)據(jù)類型,但是由于不同的編程語言或標(biāo)準(zhǔn)庫可能采用不同的字符串類型,因此在不同的應(yīng)用場景下可能需要進行字符串類型的相互轉(zhuǎn)換,本文將介紹如何在C/C++中將char*,std::string,QString,CString/MFC?String相互轉(zhuǎn)換2023-06-06C++輕量級界面開發(fā)框架ImGUI介紹小結(jié)
如果從事過C++?Windows客戶端開發(fā),大家對MFC、Qt、DuiLib等各種DirectUI應(yīng)該有了解,本篇給大家介紹一個超級輕量級的C++開源跨平臺圖形界面框架ImGUI,感興趣的可以了解一下2021-11-11