版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第1111章章 string 類字符串處理類字符串處理制作人:沈顯君 楊進(jìn)才第第1111章章 string類字符串處理類字符串處理學(xué)習(xí)目標(biāo)使用C+標(biāo)準(zhǔn)類庫中的string定義字符串對象;能使用string類成員函數(shù)、操作符對字符串對象進(jìn)行各種操作;使用字符串對象位置指針;字符串對象與C風(fēng)格字符串的轉(zhuǎn)換。 在前面的章節(jié)中,存儲字符串使用的是字符數(shù)組,對于字符串的處理是借助Cstring頭文件中提供的字符串函數(shù)完成的。 學(xué)習(xí)了類與對象后,發(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類對象的定義類對象的定義 使用數(shù)組存儲字符串,調(diào)用系統(tǒng)函數(shù)來處理字符串這種數(shù)據(jù)與處理分離的方式不符合C+面向?qū)ο蟮娘L(fēng)格。為此,C+提供了模板類basic_string, 通過: typedef basic_string string; 將模板類basic_strin具體化成字符串類string, string類封裝了字符串的屬性與方法,使對字符串處理變得方便。使用string 類需要包括頭文件string: #include 11.1 string類對象的定義類對象的定義字符串類構(gòu)造函數(shù)的原型與功能列表如表
3、11-1。 11.1 string類對象的定義類對象的定義表表11-1 String類構(gòu)造函數(shù)原型類構(gòu)造函數(shù)原型構(gòu)造函數(shù)的原形構(gòu)造函數(shù)的原形作作 用用string ( )默認(rèn)構(gòu)造函數(shù),建立長度為0的字符串string (const string& rhs)拷貝構(gòu)造函數(shù),利用已存在的串rhs初始化新串string (const string& rhs,unsigned pos,unsigned n) 將存在的串rhs的從位置pos開始,取n個字符初始化新串(位置編號從0開始)string (const char *)用字符數(shù)組s初始化新串string (const char * s,unsign
4、ed n)用字符數(shù)組s前n個字符初始化新串string (unsigned n,char c)將字符c重復(fù)n次作為新串的值 2.鏈表類模板鏈表類模板123456789101112131415161718192021232425/* p11_1.cpp * string類對象的建立與初始化 */#include #include using namespace std;int main()char * S1=12345; string S2; /建立長度為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ù),每個成員函數(shù)又有多種重載形式,表11-2只列出常用的成員函數(shù)與常用的原型。 11.2 string類成員函數(shù)類成員函數(shù)表
6、表11-2 string類常用成員函數(shù)類常用成員函數(shù)成員函數(shù)的原型成員函數(shù)的原型功功 能能unsigned length ( ) const返回本字符串對象的長度unsigned size( ) const返回本字符串對象的大小string& append(const char *s);string& append(const char *s, unsigned n);string& append(const string& str, unsigned pos, unsigned n);將字符串s附加到本串尾將字符串s的n個字符附加到本串尾將字符串對象str從pos開始的的n個字符附加到本串尾
7、string& assign(const string& str, unsigned pos, unsigned n);將字符串對象str從pos開始的的n個字符賦給本串int comparecompare(const string& str) const本串與str比較,本串 str返回正數(shù)string& insert(unsigned p0, const string& str, unsigned pos, unsigned n);將字符串對象str從pos開始的的n個字符插入到本串p0處string substr(unsigned pos=0,unsigned n=npos) const
8、返回從pos開始n個字符構(gòu)成的字符串對象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個字符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類重載了多個操作符用于對字符串進(jìn)行操作,列表如表11-3。11.3 string類的操作符類的操作符表表11-3 string類操作符類操作符操作符操作符示示 例例功功 能能+S+T將
11、S與T連成一個新串=T=S以S更新T+=T+=ST=T+S=, !=, , , =T=S, T!=S ,TS, TS, T=S將T串與S串進(jìn)行比較 S i 存取串中第i個元素coutcinS從輸入流對象提取串給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對象輸出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), 用于訪問單個字符,向前和向后遍歷字符串。指針可以進(jìn)行加、減運(yùn)算,不檢查指向的位置是否越界。 string類串位置指針的類型有: string:iterator string:const_iterator /常指針類型常指針類型,用于指向常對象 string:reverse_iterators /反向指針類型 string:con
15、st_reverse_iterators /常反向指針類型,用于指向常對象11.4 string類串位置指針類串位置指針 string類用于讀取指針的成員函數(shù)列表如表11-4。 11.4 string類串位置指針類串位置指針表表11-4 string類操作符類操作符 成員函數(shù)的原型成員函數(shù)的原型功功 能能const_iterator begin() const;iterator begin();返回常串對象第個字符的位置返回第個字符的位置const_iterator end() const;iterator end();返回常串對象最后一個字符的位置返回最后一個字符的位置const_rever
16、se_iterator rbegin() const;reverse_iterator rbegin(); 逆向返回常串對象第個字符的位置逆向返回第個字符的位置const_reverse_iterator rend() const;reverse_iterator rend();逆向返回常串對象最后一個字符的位置逆向返回最后一個字符的位置 2.鏈表類模板鏈表類模板12345678910111213141516171819202122/* p11_5.cpp * string類指針的使用,將一個串顛倒 */#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類對象中提取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對象從pos開始的的n個字符拷貝給字符串s, 返回字符數(shù)const char *c_str() const;返回指針,指向string類對象中的字符串,末尾加上0const char *data() const;返回指針,指向string類對象中的字符串 2.鏈表類模板鏈表類模板123456789101112131415161718192021222324/* p11_6.cpp * 從string類字符串中提取C風(fēng)格字符串 */#include #include using namespace s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鼻中隔膿腫的健康宣教
- 肩先露的健康宣教
- 《嵌入式系統(tǒng)原理與開發(fā)》課件-第3章
- 胎兒宮內(nèi)發(fā)育遲緩的健康宣教
- 萎縮性鼻炎的健康宣教
- 顳骨巖部炎的健康宣教
- 鰓源性囊腫與瘺的健康宣教
- 理財(cái)規(guī)劃師課件-財(cái)務(wù)
- 清華大學(xué)Java課件l
- 《詞類活用笑笑草》課件
- 基礎(chǔ)有機(jī)化學(xué)實(shí)驗(yàn)智慧樹知到期末考試答案2024年
- 提升生產(chǎn)線效能
- 學(xué)生常見病防治專項(xiàng)方案
- 醫(yī)院藥品目錄(很好的)
- 安徽省縣中聯(lián)盟2023-2024學(xué)年高二上學(xué)期12月聯(lián)考數(shù)學(xué)試題
- 家具廠編碼規(guī)則(新)
- 班前安全技術(shù)交底記錄表
- 規(guī)范權(quán)力運(yùn)行方面存在問題及整改措施范文(五篇)
- 減壓孔板計(jì)算
- 博物館學(xué)概論課件:博物館與觀眾
- 反恐培訓(xùn)內(nèi)容
評論
0/150
提交評論