




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一起來(lái)看看C++STL容器之string類目錄前言1.標(biāo)準(zhǔn)庫(kù)中的string類2.string類的常用接口說(shuō)明2.1string對(duì)象的常見構(gòu)造2.2string類對(duì)象的容量操作2.2.1reserve是如何開辟空間的2.2.2clear和empty2.2.3resize的用法2.3string類對(duì)象的訪問以及遍歷操作范圍for的使用2.4string類對(duì)象的修改操作2.4.1push_back和append以及operator+=2.4.2find和rfind以及substr2.5string非成員函數(shù)重載總結(jié)
前言
為什么學(xué)習(xí)string類:
在C語(yǔ)言中,字符串是以\0結(jié)尾的集合,為了操作方便,在C標(biāo)準(zhǔn)庫(kù)中提供一些str系列的函數(shù)(strstr,strcmp,strcpy),但是這些庫(kù)函數(shù)和字符串時(shí)分離的,不太符合oop的思想。稍不留神就會(huì)造成越界訪問。
在OJ題中,有關(guān)字符串的題目基本以string的形式出現(xiàn),而且在常規(guī)的工作中,為了簡(jiǎn)單,方便,快捷,基本都是使用string類,很少有人會(huì)使用C庫(kù)中的字符串操作函數(shù)。
1.標(biāo)準(zhǔn)庫(kù)中的string類
1.string類是表示字符串的字符種類。
2.該類的接口與常規(guī)容器的接口基本相同,在添加一些專門用來(lái)操作string的常規(guī)操作。
3.string的底層是:basic_string模板類的別名。
4.不能操作多字節(jié)或者變長(zhǎng)字符的序列。
在使用string的時(shí)候,必需包含頭文件#includestring以及usingnamespacestd;
2.string類的常用接口說(shuō)明
2.1string對(duì)象的常見構(gòu)造
string()構(gòu)造空的string類對(duì)象string(constchar*str)以常量字符創(chuàng)為參數(shù)構(gòu)造string類string(size_tn,charch)string對(duì)象中包含了n個(gè)字符cstring(conststrings)拷貝構(gòu)造函數(shù)
#includeiostream
#includestring
usingnamespacestd;
intmain()
strings1;
strings2("CSDN");
strings3(4,'A');
strings4(s2);
couts1endl;
couts2endl;
couts3endl;
couts4endl;
[點(diǎn)擊并拖拽以移動(dòng)]
?
運(yùn)行結(jié)果:
2.2string類對(duì)象的容量操作
size返回字符串的有效長(zhǎng)度length和size一致,推薦使用sizecapacity返回總空間大小clear清空有效字符,但是不對(duì)capacity有影響reserve為字符串預(yù)留空間empty判斷字符串是否為空串,返回值為boolresize將有效字符的個(gè)數(shù)該成n個(gè),多出的空間用字符c填充
2.2.1reserve是如何開辟空間的
voidreserve(size_tn=0)
voidTestPushBack()
strings;
size_tsz=s.capacity();
for(inti=0;i1000;++i)
s.push_back('c');
if(sz!=s.capacity())//當(dāng)sz和_capacity不相等的時(shí)候,說(shuō)明reserve已經(jīng)增容了。
staticintn=1;
sz=s.capacity();
printf("第%d次開辟空間:_capacity=%d\n",n++,sz);
}
運(yùn)行結(jié)果:
說(shuō)明在VS的環(huán)境下,reserve每次開辟的空間是前一次空間的約1.5倍。
2.2.2clear和empty
voidclear()
boolempty()const
#includeiostream
#includestring
usingnamespacestd;
intmain()
strings1("CSDN");
couts1.capacity()endl;
couts1.empty()endl;
s1.clear();
couts1.capacity()endl;
couts1.empty()endl;
}
運(yùn)行結(jié)果:
說(shuō)明了clear只會(huì)清理有效的字符串,不會(huì)對(duì)空間的大小有影響,當(dāng)clear后,empty的返回值為0,說(shuō)明了此時(shí)的是s1是空字符串。
2.2.3resize的用法
voidresize(size_tn)
voidresize(size_tn,charch)
#includeiostream
#includestring
usingnamespacestd;
intmain()
strings1("CSDN");
s1.resize(10,'A');//輸出的是------CSDNAAAAAAAA
couts1endl;
}
2.3string類對(duì)象的訪問以及遍歷操作
operator[]返回pos位置的字符,conststring類對(duì)象調(diào)用begin+endbegin獲取一個(gè)字符的迭代器+end獲取最后一個(gè)字符下一個(gè)位置的迭代器(正向迭代器)rbegin+rendbegin獲取一個(gè)字符的迭代器+end獲取最后一個(gè)字符下一個(gè)位置的迭代器(反向迭代器)范圍forC++11支持的更簡(jiǎn)潔的遍歷方式
const_iteratorbegin()const
iteratorbegin()
#includeiostream
#includestring
usingnamespacestd;
intmain()
strings1("helloCSDN");
autoit1=s1.begin();//正向迭代器
while(it1!=s1.end())//end指向的是最后一個(gè)元素的下一位
cout*it1"";
it1++;
coutendl;
autoit2=s1.rbegin();//反向迭代器
while(it2!=s1.rend())
cout*it2"";
it2++;
}
運(yùn)行結(jié)果:
范圍for的使用
#includeiostream
#includestring
usingnamespacestd;
intmain()
strings1("helloCSDN");
for(autoch:s1)
coutch"";
}
本質(zhì)上,范圍for調(diào)用的是迭代器。
2.4string類對(duì)象的修改操作
push_back尾插字符chappend尾插字符串stroperator+=尾插字符ch/尾插字符串c_str返回C格式字符串find+npos從字符串pos位置開始往后找字符c,返回該字符在字符串中的位置,npos是size_t的最大值rfind從字符串pos位置開始往前找字符c,返回該字符在字符串中的位置substr在str中從pos位置開始,截取n個(gè)字符,然后將其返回
2.4.1push_back和append以及operator+=
voidpush_back(charch)
stringappend(constchar*str)
stringoperator+=(charch)
stringoperator+=(constchar*str)
#includeiostream
#includestring
usingnamespacestd;
intmain()
strings1("hello");
s1.push_back('C');
s1.append("SDN");
couts1endl;
strings2("hello");
s2+='w';
s2+="orld";
couts2endl;
}
運(yùn)行結(jié)果:
operator+=可以尾插字符,也可以尾插字符串。實(shí)際上,operator+=尾插字符的時(shí)候,調(diào)用的是push_back,尾插字符串的時(shí)候,調(diào)用的是append。
2.4.2find和rfind以及substr
size_tfind(charc,size_tpos=0)const
size_trfind(charc,size_tpos=npos)
stringsubstr(size_tpos=0,size_tlen=npos)
#includeiostream
#includestring
usingnamespacestd;
intmain()
strings1("helloCSDN");
couts1.find('C')endl;
couts1.rfind('C',0)endl;//從pos=0處,即字符'h'往前找,找不到字符'C'返回的是npos
//npos是size_t中的最大值---4294967295
couts1.rfind('C',8)endl;
couts1.substr(2,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二級(jí)Msoffice考試的心理準(zhǔn)備與技巧分享試題及答案
- 準(zhǔn)確把握的軟件評(píng)測(cè)師考試試題及答案
- 掌握網(wǎng)絡(luò)規(guī)劃設(shè)計(jì)師考試試題及答案
- 社會(huì)心理學(xué)應(yīng)用試題及答案解析
- 網(wǎng)絡(luò)設(shè)計(jì)中的彈性考慮試題及答案
- 宿管部復(fù)試面試題及答案
- 評(píng)測(cè)師如何進(jìn)行全面的質(zhì)量評(píng)估試題及答案
- 2025年軟件評(píng)測(cè)師考試備考步驟與細(xì)則試題及答案
- 小技巧應(yīng)對(duì)初級(jí)社會(huì)工作者考試試題答案
- 2025員工試用合同書范本
- 醫(yī)院檢驗(yàn)科實(shí)驗(yàn)室生物安全管理手冊(cè)
- 公交車司機(jī)急救培訓(xùn)課件
- 慢性阻塞性肺疾病的緊急救治與護(hù)理細(xì)節(jié)
- DB53-T 1215-2023 陸生野生動(dòng)物收容救護(hù)技術(shù)規(guī)范
- 第二批罕見病目錄2023版
- GB/T 15231-2023玻璃纖維增強(qiáng)水泥性能試驗(yàn)方法
- 虛擬維護(hù)助手-使用VR技術(shù)幫助維護(hù)人員進(jìn)行設(shè)備維修和保養(yǎng)
- 印章移交清單
- 豬病防治考試復(fù)習(xí)題庫(kù)(含答案)
- 籃球興趣班訓(xùn)練計(jì)劃
- 北師大版四年級(jí)數(shù)學(xué)下冊(cè)《等量關(guān)系》評(píng)課稿
評(píng)論
0/150
提交評(píng)論