版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)1課程內(nèi)容安排CString與String的比較。討論C++中StringClass的實(shí)現(xiàn)方法。1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)2CString與StringClassstringclass:stringclassinthestandardlibraryaccessedby#include<string>Cstrings:canbeaccessedby#include<cstring>
AStringconstantisstoredasachararray.即一個常量的string被認(rèn)為是cstringe.g.:“Helloeveryone”//cstringstrings=“Helloeveryone”//Stringobject
1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)3WhatisaCString?ChararrayACstringisachararrayterminatedbythenullcharacter‘\0’(withASCIIvalue0).ACstringvariablecanbeinitializedinitsdeclarationinfollowingways.
charmessage[8]={‘H’,‘e’,‘l’,‘l’,‘o’,‘\0’};
charmessage[8]=“Hello”;Char*message=“hello”;message[0][1][2][3][4][5][6][7]‘H’‘e’‘l’‘l’‘o’‘\0’1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)4字符串(String)字符串是n(0)個字符的有限序列,記作S:“c1c2c3…cn”其中,S是串名字
“c1c2c3…cn”
是串值
ci是串中字符
n是串的長度。
1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)5functionsthatmanipulateC-strings//字符串的拷貝操作。char*strcpy(char*to,char*from);Pre:Thestringfromhasbeeninitialized.Post:Thefunctioncopiesstringfromtostringto,including‘\0’;itreturnsapointertothebeginningofthestringto.//將from指向的內(nèi)容鏈接在to的內(nèi)容之后char*strcat(char*to,char*from);Pre:Thestringsfromandtohavebeeninitialized.Post:Thefunctioncopiesstringfromtotheendofstringto,including‘\0’;itreturnsapointertothebeginningofthestringto.1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)6functionsthatmanipulateC-strings//求字符串的長度intstrlen(char*s);Pre:Thestringshasbeeninitialized.Post:Thefunctionreturnsthelengthofthestrings,notincludingthenullbyte‘\0’attheendofthestrings.//字符串的比較操作。intstrcmp(char*s1,char*s2);Pre:Thestringss1ands2havebeeninitialized.Post:Thefunctioncomparesstrings1tostrings2;itreturns<0ifs1<s2,0ifs1==s2,or>0ifs1>s2.1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)7functionsthatmanipulateC-strings//返回s2第一次在s1中出現(xiàn)的位置。char*strstr(char*s1,char*s2);Pre:Thestringss1ands2havebeeninitialized.Post:Thefunctionreturnsapointertothefirstoccurrenceofthestrings2inthestrings1,oritreturnsNULLifthestrings2isnotpresentins1.1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)8StringsinC char*p="helloworld";//can'tbewritten char*q=newchar[strlen(p)+1]; strcpy(q,p); cout<<q<<endl; //q=p; p=q; *p='H';cout<<q<<endl; cout<<p<<endl;1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)9StringsinCchar*strcpy(char*to,char*from){ inti; for(i=0;from[i]!='\0';i++)to[i]=from[i]; to[i]='\0'; returnto;}1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)10StringsinCintstrlen(char*s){inti;for(i=0;s[i]!='\0';i++);return(i);}1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)11ComparisonBOOKP234Figure6.5“Importantstring”“acquiresanalias”S2=s1S2S11/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)12ComparisonC-stringsarewidelyavailable.C-stringsareveryefficient.C-stringobjectsarenotencapsulated.C-stringsareeasytomisuse,withconsequencesthatcanbedisastrous.ItiseasyforaclienttocreateeithergarbageoraliasesforC-stringdata.1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)13//******************************************************//PrintNameprogram//Thisprogramprintsanameintwodifferentformats//******************************************************#include<iostream> //forcoutandendl#include<string> //fordatatypestringusingnamespacestd;conststringFIRST=“Herman”;//Person’sfirstnameconststringLAST=“Smith”;//Person’slastnameconstcharMIDDLE=‘G’;//Person’smiddleinitialC++Program--STLSTRING1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)14C++CodeContinuedintmain(){stringfirstLast;//Nameinfirst-lastformatstringlastFirst; //Nameinlast-firstformat
firstLast=FIRST+““+LAST;cout<<“Nameinfirst-lastformatis“<<endl <<firstLast<<endl;lastFirst=LAST+“,“+FIRST+’’;cout<<“Nameinfirst-lastformatis“<<endl <<lastFirst<<MIDDLE<<’.’<<endl;return0;}1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)15OutputofProgram
Nameinfirst-lastformatisHermanSmithNameinlast-first-initialformatisSmith,HermanG.1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)16ImplementationofStringClassclassString{public://methodsofthestringADT String(); ~String(); String(constString©);//copyconstructor String(constchar*copy);//conversionfromC-string String(List<char>©);//conversionfromList voidoperator=(constString©); constchar*c_str()const;//conversiontoC-stylestringprotected: char*entries; intlength;};1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)17運(yùn)算符重載,全局方法booloperator==(constString&rst,constString&second);booloperator>(constString&rst,constString&second);booloperator<(constString&rst,constString&second);booloperator>=(constString&rst,constString&second);booloperator<=(constString&rst,constString&second);booloperator!=(constString&rst,constString&second);1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)18StringconstructorString::String(){ entries=newchar[1]; entries[0]='\0'; length=0;}1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)19StringconstructorString::String(List<char>&in_list)/*Post:TheStringisinitializedbythecharacterListin_list.*/{ length=in_list.size(); entries=newchar[length+1]; for(inti=0;i<length;i++)in_list.retrieve(i,entries[i]); entries[length]='\0';}1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)20ImplementationofStringClassconstchar*String::c_str()const/*Post:ApointertoalegalC-stringobjectmatchingtheStringisreturned.*/{ return(constchar*)entries;}1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)21全局函數(shù)的實(shí)現(xiàn)
OperatorOverloadbooloperator==(constString&first,constString&second)/*Post:ReturntrueiftheStringfirstagreeswithStringsecond.Else:Returnfalse.*/{ returnstrcmp(first.c_str(),second.c_str())==0;}1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)22FunctionOverloadvoidstrcat(String&add_to,constString&add_on)/*Post:ThefunctionconcatenatesStringadd_onontotheendofStringadd_to.*/{constchar*cfirst=add_to.c_str();constchar*csecond=add_on.c_str();char*copy=newchar[strlen(cfirst)+strlen(csecond)+1];strcpy(copy,cfirst);strcat(copy,csecond);add_to=copy;//?delete[]copy;}1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)23MainProgramStringread_in(istream&input)/*Post:ReturnaStringread(ascharactersterminatedbyanewlineoranend-of-filecharacter)fromanistreamparameter.*/{List<char>temp;intsize=0;charc;while((c=input.peek())!=EOF&&(c=input.get())!='\n')temp.insert(size++,c);Stringanswer(temp);returnanswer;}1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)24MainProgramvoidwrite(String&s)/*Post:TheStringparametersiswrittentocout.*/{cout<<s.c_str()<<endl;}注意:Char*p=“hello”;Cout<<p;//將輸出字符串hello的值。1/21/2026數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)25MainProgramostream&operator<<(ostream&output,Strings1){ ou
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 會議后續(xù)跟蹤與效果評估制度
- 2026年浙江大學(xué)杭州國際科創(chuàng)中心吳新科教授課題組招聘備考題庫及答案詳解參考
- 2026年浙江大學(xué)愛丁堡大學(xué)聯(lián)合學(xué)院方兆元課題組科研助理招聘備考題庫及1套參考答案詳解
- 企業(yè)設(shè)備管理規(guī)范制度
- 中學(xué)學(xué)生社團(tuán)活動經(jīng)費(fèi)管理流程制度
- 2026年湘潭市九華中學(xué)(長沙市一中九華中學(xué))代課教師招聘備考題庫完整答案詳解
- 2026年榆林市第五幼兒園招聘備考題庫及參考答案詳解1套
- 2026年鐘祥市國有企業(yè)公開招聘工作人員16人備考題庫完整答案詳解
- 2026年玉環(huán)公證處招聘備考題庫及一套答案詳解
- 2026年河南姚孟能源投資有限公司招聘備考題庫及參考答案詳解一套
- 環(huán)衛(wèi)清掃保潔、垃圾清運(yùn)及綠化服務(wù)投標(biāo)方案(技術(shù)標(biāo) )
- 2023年廣東學(xué)業(yè)水平考試物理常考知識點(diǎn)
- 房地產(chǎn)運(yùn)營-項(xiàng)目代建及管理實(shí)務(wù)
- 中外政治思想史-復(fù)習(xí)資料
- GB/T 12385-2008管法蘭用墊片密封性能試驗(yàn)方法
- 中國近代史期末復(fù)習(xí)(上)(第16-20課)【知識建構(gòu)+備課精研】 高一歷史上學(xué)期期末 復(fù)習(xí) (中外歷史綱要上)
- GB 11887-2008首飾貴金屬純度的規(guī)定及命名方法
- 《LED的基礎(chǔ)知識》課件
- 需求導(dǎo)向式銷售研討課程課件
- DB13T 5603-2022 工貿(mào)行業(yè)非高危建設(shè)項(xiàng)目安全設(shè)施“三同時”報(bào)告編制導(dǎo)則
- DB13T 5435-2021 內(nèi)陸水域游船碼頭安全運(yùn)營規(guī)范
評論
0/150
提交評論