數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)(17)String-Operator-overload_第1頁
數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)(17)String-Operator-overload_第2頁
數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)(17)String-Operator-overload_第3頁
數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)(17)String-Operator-overload_第4頁
數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)(17)String-Operator-overload_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論