一起來(lái)看看C++STL容器之string類_第1頁(yè)
一起來(lái)看看C++STL容器之string類_第2頁(yè)
一起來(lái)看看C++STL容器之string類_第3頁(yè)
一起來(lái)看看C++STL容器之string類_第4頁(yè)
一起來(lái)看看C++STL容器之string類_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論