




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第1111章章 string 類字符串處理類字符串處理制作人:沈顯君 楊進(jìn)才第第1111章章 string類字符串處理類字符串處理學(xué)習(xí)目標(biāo)使用C+標(biāo)準(zhǔn)類庫中的string定義字符串對(duì)象;能使用string類成員函數(shù)、操作符對(duì)字符串對(duì)象進(jìn)行各種操作;使用字符串對(duì)象位置指針;字符串對(duì)象與C風(fēng)格字符串的轉(zhuǎn)換。 在前面的章節(jié)中,存儲(chǔ)字符串使用的是字符數(shù)組,對(duì)于字符串的處理是借助Cstring頭文件中提供的字符串函數(shù)完成的。 學(xué)習(xí)了類與對(duì)象后,發(fā)現(xiàn)這種方式不符合面向?qū)ο蟮娘L(fēng)格,于是我們自己定義了字符串類String,編寫少數(shù)字符串處理的成員函數(shù)。 字符串是C+中一種很重要的數(shù)據(jù),C+標(biāo)準(zhǔn)類庫標(biāo)準(zhǔn)類庫提
2、供了字符串字符串類類string,為字符串處理提供了大量的操作。 11.1 string類對(duì)象的定義類對(duì)象的定義 使用數(shù)組存儲(chǔ)字符串,調(diào)用系統(tǒng)函數(shù)來處理字符串這種數(shù)據(jù)與處理分離的方式不符合C+面向?qū)ο蟮娘L(fēng)格。為此,C+提供了模板類basic_string, 通過: typedef basic_string string; 將模板類basic_strin具體化成字符串類string, string類封裝了字符串的屬性與方法,使對(duì)字符串處理變得方便。使用string 類需要包括頭文件string: #include 11.1 string類對(duì)象的定義類對(duì)象的定義字符串類構(gòu)造函數(shù)的原型與功能列表如表
3、11-1。 11.1 string類對(duì)象的定義類對(duì)象的定義表表11-1 String類構(gòu)造函數(shù)原型類構(gòu)造函數(shù)原型構(gòu)造函數(shù)的原形構(gòu)造函數(shù)的原形作作 用用string ( )默認(rèn)構(gòu)造函數(shù),建立長(zhǎng)度為0的字符串string (const string& rhs)拷貝構(gòu)造函數(shù),利用已存在的串rhs初始化新串string (const string& rhs,unsigned pos,unsigned n) 將存在的串rhs的從位置pos開始,取n個(gè)字符初始化新串(位置編號(hào)從0開始)string (const char *)用字符數(shù)組s初始化新串string (const char * s,unsign
4、ed n)用字符數(shù)組s前n個(gè)字符初始化新串string (unsigned n,char c)將字符c重復(fù)n次作為新串的值 2.鏈表類模板鏈表類模板123456789101112131415161718192021232425/* p11_1.cpp * string類對(duì)象的建立與初始化 */#include #include using namespace std;int main()char * S1=12345; string S2; /建立長(zhǎng)度為0的字符串string S3(abcde); /用字符串初始化新串string S4(S3); /利用已存在的串S3初始化新串string S
5、5(S3,0,3); /利用已存在的串S3初始化新串string S6(S1,3); /利用已存在的字符數(shù)組初始化新串string S7(6,A);coutS2=S2endl; coutS3=S3endl;coutS4=S4endl;coutS5=S5endl;coutS6=S6endl;coutS7=S7endl; return 0; 運(yùn)行結(jié)果運(yùn)行結(jié)果: :S2=S3=abcdeS4=abcdeS5=abcS6=123S7=AAAAAA string類提供了豐富的成員函數(shù),每個(gè)成員函數(shù)又有多種重載形式,表11-2只列出常用的成員函數(shù)與常用的原型。 11.2 string類成員函數(shù)類成員函數(shù)表
6、表11-2 string類常用成員函數(shù)類常用成員函數(shù)成員函數(shù)的原型成員函數(shù)的原型功功 能能unsigned length ( ) const返回本字符串對(duì)象的長(zhǎng)度unsigned size( ) const返回本字符串對(duì)象的大小string& append(const char *s);string& append(const char *s, unsigned n);string& append(const string& str, unsigned pos, unsigned n);將字符串s附加到本串尾將字符串s的n個(gè)字符附加到本串尾將字符串對(duì)象str從pos開始的的n個(gè)字符附加到本串尾
7、string& assign(const string& str, unsigned pos, unsigned n);將字符串對(duì)象str從pos開始的的n個(gè)字符賦給本串int comparecompare(const string& str) const本串與str比較,本串 str返回正數(shù)string& insert(unsigned p0, const string& str, unsigned pos, unsigned n);將字符串對(duì)象str從pos開始的的n個(gè)字符插入到本串p0處string substr(unsigned pos=0,unsigned n=npos) const
8、返回從pos開始n個(gè)字符構(gòu)成的字符串對(duì)象unsigned find(const string& str,unsigned pos = 0) const在本串中查找str, 返回第一次出現(xiàn)的位置;未找到,返回string:nposstring& replace(unsigned p0, unsigned n0, const string& str);用str替換本串中從位置p0開始的n0個(gè)字符void swap(string& str)交換本串與str 2.鏈表類模板鏈表類模板123456789101112131415161718192021232425/* p11_2.cpp * string
9、類的成員函數(shù)的使用,字符串查找與替換 */#include #include using namespace std;int main()string text(I like c+, I use c+ programming.); /文本string newstr; /新串string sstr; /待查串int pos; /存放查找到串的位置coutsstrnewstr;if(pos=text.find(sstr)=string:npos) /未查找到coutsstr not found in textendl;else coutold string: textendl; text.repl
10、ace(pos,sstr.length(),newstr);coutnew string: textendl; return 0; 運(yùn)行結(jié)果運(yùn)行結(jié)果: :Input string and new string:c+ Java old string: I like c+, I use c+ programmingnew string: I like Java, I use c+ programming string類重載了多個(gè)操作符用于對(duì)字符串進(jìn)行操作,列表如表11-3。11.3 string類的操作符類的操作符表表11-3 string類操作符類操作符操作符操作符示示 例例功功 能能+S+T將
11、S與T連成一個(gè)新串=T=S以S更新T+=T+=ST=T+S=, !=, , , =T=S, T!=S ,TS, TS, T=S將T串與S串進(jìn)行比較 S i 存取串中第i個(gè)元素coutcinS從輸入流對(duì)象提取串給S 2.鏈表類模板鏈表類模板1234567891011121314151617181920212324/* p11_3.cpp * string類的操作符將字符串排序 */#include #include using namespace std;int main()const int n=6;string line=A,above,a,an,about,1234;for (int i=
12、0;in-1;i+) for (int j=i+1;jlinej) /如果前面字串比后面大 / linei.swap(linej); 交換string temps;temps=linei;linei=linej;linej=temps; for(i=0;in;i+)coutlineiendl; return 0; 運(yùn)行結(jié)果運(yùn)行結(jié)果: :1234Aaaboutabovean 2.鏈表類模板鏈表類模板1234567891011121314151617181920212324/* 程序名:p11_4.cpp * 功 能:string類的字符串運(yùn)算符的應(yīng)用 */#include #include us
13、ing namespace std;int main()string str1(C+);string str2(is);string str3,str4;string str5(powerful);cinstr3; /字符串輸入coutstr1 str2 str3!endl; /string對(duì)象輸出str4=str1+ +str2+ +str3+!; /字符串連接coutstr4endl;if(str3str5) /字符串比較coutstr3str5 str5:str5endl;string str6(str5); /字符串賦值str6=str1+ +str2+ +str6+!;coutstr
14、6endl;return 0; 運(yùn)行結(jié)果運(yùn)行結(jié)果: :okC+ is ok!C+ is ok!str3str5 str5:powerfulC+ is powerful! string類提供了指向string類串中字符的位置指針位置指針(迭代器迭代器iterator), 用于訪問單個(gè)字符,向前和向后遍歷字符串。指針可以進(jìn)行加、減運(yùn)算,不檢查指向的位置是否越界。 string類串位置指針的類型有: string:iterator string:const_iterator /常指針類型常指針類型,用于指向常對(duì)象 string:reverse_iterators /反向指針類型 string:con
15、st_reverse_iterators /常反向指針類型,用于指向常對(duì)象11.4 string類串位置指針類串位置指針 string類用于讀取指針的成員函數(shù)列表如表11-4。 11.4 string類串位置指針類串位置指針表表11-4 string類操作符類操作符 成員函數(shù)的原型成員函數(shù)的原型功功 能能const_iterator begin() const;iterator begin();返回常串對(duì)象第個(gè)字符的位置返回第個(gè)字符的位置const_iterator end() const;iterator end();返回常串對(duì)象最后一個(gè)字符的位置返回最后一個(gè)字符的位置const_rever
16、se_iterator rbegin() const;reverse_iterator rbegin(); 逆向返回常串對(duì)象第個(gè)字符的位置逆向返回第個(gè)字符的位置const_reverse_iterator rend() const;reverse_iterator rend();逆向返回常串對(duì)象最后一個(gè)字符的位置逆向返回最后一個(gè)字符的位置 2.鏈表類模板鏈表類模板12345678910111213141516171819202122/* p11_5.cpp * string類指針的使用,將一個(gè)串顛倒 */#include #include using namespace std;int mai
17、n()const string string1=(ABCDEFGHI);string string2(string1);int length=string1.length(); coutstring1endl; coutstring2endl;string:const_reverse_iterator itr1=string1.rbegin();string:iterator itr2=string2.begin();for(int i=0;ilength; i+) itr2i=itr1i; / *(itr2+i)=*(itr1+i);coutitr2endl; return 0; 運(yùn)行結(jié)果運(yùn)
18、行結(jié)果: :ABCDEFGHIABCDEFGHIIHGFEDCBA C風(fēng)格的字符串通常作為string類串的初值,可以使用前面列出的string類成員函數(shù)將中C風(fēng)格的字符串作為string類串的數(shù)據(jù)成員。 將string類串轉(zhuǎn)化成C風(fēng)格字符串實(shí)際上是從string類串中提取其中的字符。string類串不以NULL(0)結(jié)尾,而C風(fēng)格的字符串以NULL結(jié)尾,因此當(dāng)從string類串中提取字符后,要在尾部加上結(jié)尾符。 11.5 string類串與風(fēng)格字符串的轉(zhuǎn)化類串與風(fēng)格字符串的轉(zhuǎn)化 string類提供了從string類對(duì)象中提取C風(fēng)格字符串的成員函數(shù),列表如表11-5。11.5 string類串
19、與風(fēng)格字符串的轉(zhuǎn)化類串與風(fēng)格字符串的轉(zhuǎn)化表表11-5 string類中提取類中提取C串的成員函數(shù)串的成員函數(shù)成員函數(shù)的原型成員函數(shù)的原型功功 能能unsigned copy(char *s , unsigned n, unsigned pos = 0) const;將string對(duì)象從pos開始的的n個(gè)字符拷貝給字符串s, 返回字符數(shù)const char *c_str() const;返回指針,指向string類對(duì)象中的字符串,末尾加上0const char *data() const;返回指針,指向string類對(duì)象中的字符串 2.鏈表類模板鏈表類模板123456789101112131415161718192021222324/* p11_6.cpp * 從string類字符串中提取C風(fēng)格字符串 */#include #include using namespace s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政管理與組織優(yōu)化策略試題及答案
- 2024年項(xiàng)目管理資格的考試技巧與策略試題及答案
- 證券從業(yè)資格證考試考試經(jīng)驗(yàn)總結(jié)試題及答案
- 2025年國(guó)際金融理財(cái)師資格考試的準(zhǔn)備計(jì)劃和策略試題及答案
- 充分準(zhǔn)備2025年證券從業(yè)資格證考試試題及答案
- 2024年項(xiàng)目管理流程分析試題及答案
- 2025年注會(huì)考試的法律知識(shí)重要性及試題及答案
- 2024園藝師考試模擬測(cè)試試題及答案
- 注冊(cè)會(huì)計(jì)師的職業(yè)發(fā)展方向試題及答案
- 2024年項(xiàng)目管理專業(yè)人士資格認(rèn)證試題及答案概述
- 錢大媽計(jì)劃書
- 建筑施工電動(dòng)運(yùn)輸車輛進(jìn)場(chǎng)驗(yàn)收表
- Unit2Let'sCelebrate!Developingideas作業(yè)設(shè)計(jì)-2023-2024學(xué)年高中英語(精修版)
- 《愛彌兒》讀書分享會(huì)
- 預(yù)后的研究與評(píng)價(jià)
- 中醫(yī)治療潰瘍性結(jié)腸炎的難點(diǎn)及優(yōu)勢(shì)課件
- 人教版七年級(jí)上冊(cè)英語單詞表
- 建筑電工培訓(xùn)課件
- 中班語言課件《章魚先生賣雨傘》
- 2023年成都市錦江區(qū)九年級(jí)二診語文試題(含答案)
- 感染性疾病臨床診療規(guī)范2021版
評(píng)論
0/150
提交評(píng)論