第5章數(shù)組-字符數(shù)組_第1頁
第5章數(shù)組-字符數(shù)組_第2頁
第5章數(shù)組-字符數(shù)組_第3頁
第5章數(shù)組-字符數(shù)組_第4頁
第5章數(shù)組-字符數(shù)組_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第第5章章 數(shù)組數(shù)組第第5章章 利用數(shù)組利用數(shù)組5.1 為什么需要數(shù)組為什么需要數(shù)組5.2 定義和引用一維數(shù)組定義和引用一維數(shù)組5.3 定義和引用二維數(shù)組定義和引用二維數(shù)組5.4 用數(shù)組作函數(shù)參數(shù)用數(shù)組作函數(shù)參數(shù)5.5 字符數(shù)組字符數(shù)組*5.6 C+處理字符串的方法處理字符串的方法字符串類與字符字符串類與字符串變量串變量第第5章章 數(shù)組數(shù)組5.5 字符數(shù)組字符數(shù)組字符數(shù)組用來存放字符串?dāng)?shù)據(jù),字符數(shù)組中的一個元字符數(shù)組中的一個元素存放一個字符,字符數(shù)組具有前述數(shù)組的共同屬性素存放一個字符,字符數(shù)組具有前述數(shù)組的共同屬性。由于字符串應(yīng)用廣泛,C和C+專門為它提供了許多方便的用法和函數(shù)。5.5.1

2、定義和初始化字符數(shù)組定義和初始化字符數(shù)組1. 定義字符數(shù)組定義字符數(shù)組的方法與數(shù)值數(shù)組類似。例如char c10;定義c為字符數(shù)組,包含10個字符型元素。第第5章章 數(shù)組數(shù)組2. 初始化字符數(shù)組初始化字符數(shù)組,最容易理解的方式是逐個字符賦給數(shù)組中各元素。如char c10= I, ,a,m, ,h,a,p,p,y ;把10個字符分別賦給c0c9這10個元素,如圖5.7。說明:如果花括號中提供的初值個數(shù)初值個數(shù)大于大于數(shù)組長度數(shù)組長度,則按語法錯誤錯誤處理。如果初值個數(shù)初值個數(shù)小于小于數(shù)組長度數(shù)組長度,其余其余的元素自動定為空字符的元素自動定為空字符。如果提供的初值個數(shù)與初值個數(shù)與預(yù)定的數(shù)組長度

3、相同長度相同,在定義時可以省略數(shù)組長度定義時可以省略數(shù)組長度,系統(tǒng)會自動根據(jù)初值個數(shù)確定數(shù)組長度。如下形式自動確定為10char c = I, ,a,m, ,h,a,p,p,y ;第第5章章 數(shù)組數(shù)組5.5.2 字符數(shù)組的賦值與引用字符數(shù)組的賦值與引用和數(shù)值數(shù)組一樣,只能對字符數(shù)組的元素賦值,而不能對整個數(shù)組賦值。如char c5;c0=C; c1=h;c2=i;c3=n;c4=a; c0=c1; /對數(shù)組元素賦值,正確。而char a10,c10,b10=C, h, i, n, a ; c=C, h, i, n, a ; /錯誤,企圖對整個數(shù)組一次賦值a=b; /錯誤,企圖對整個數(shù)組整體賦值

4、第第5章章 數(shù)組數(shù)組實例實例:引用字符數(shù)組,輸出一個字符串。#include using namespace std;void main ( ) char c10=I, ,a,m, ,a, ,b,o,y; int i; for(i=0;i10;i+) coutci; /逐個引用數(shù)組元素,每次輸出一個字符 coutendl; return 0; 輸出結(jié)果: I am a boy第第5章章 數(shù)組數(shù)組例例5.9 設(shè)計和輸出一個鉆石圖形(二維字符數(shù)組的定義、初始化和引用)。#include using namespace std;void main( )char diamond 5= , ,*, ,*

5、, ,*,*, , , ,*, ,*, ,*, , ,*; int i,j; for (i=0;i5;i+) for (j=0;j5;j+) coutdiamondij; coutendl; 運行結(jié)果為: * * * * * * *第第5章章 數(shù)組數(shù)組5.5.3 字符串和字符串結(jié)束標(biāo)志字符串和字符串結(jié)束標(biāo)志1. 對一個字符串常量,存放時系統(tǒng)會自動在自動在所有字符的后面加一個后面加一個0作為結(jié)束符(P24)。例如 coutstr; /用字符數(shù)組名字符數(shù)組名輸入字符串coutstr; /用字符數(shù)組名字符數(shù)組名輸出字符串在運行時輸入一個字符串,如China在內(nèi)存中,在5個字符的后面自動加了一個結(jié)束符

6、0 。執(zhí)行“coutstr;”的過程是從str所指向的數(shù)組第一個元素開始逐個輸出字符,直到遇到0為止。輸出結(jié)果為China第第5章章 數(shù)組數(shù)組說明:(1) 輸出的字符不包括結(jié)束符0 。(2) 輸出字符串時,cout流用字符數(shù)組名字符數(shù)組名-字符數(shù)組地址字符數(shù)組地址。 (3) 如果數(shù)組長度大于字符串實際長度,也只輸出到0。(4) 如果一個字符數(shù)組中包含多個0,則遇第一個0時輸出就結(jié)束。(5) 用cin向計算機(jī)輸入一個字符串時,從鍵盤輸入的字符串應(yīng)短于已定義的字符數(shù)組的長度,否則可能可能會出現(xiàn)問題。(6) 上述程序段,若輸入“How are you ?”,則輸出“How”。把“How”后的空格看成

7、是字符串的分隔符空格看成是字符串的分隔符,只將空格前的字符“How”作為字符串處理,存入str中,其后加0。輸入行帶有空格的字符串,可以使用字符數(shù)組逐個輸入字符也可以使用字符串處理函數(shù)、字符串變量或使用cin流中的getline函數(shù)。第第5章章 數(shù)組數(shù)組5.5.5 使用字符串處理函數(shù)使用字符串處理函數(shù)由于字符串使用廣泛,C和C+提供了一些字符串函數(shù),使得用戶能很方便地對字符串進(jìn)行處理。這些函數(shù),是在string和string.h頭文件中定義。使用時應(yīng)該用用#include命令命令把把string.h或或string頭文件包含到本文件中頭文件包含到本文件中。1. 字符串連接函數(shù)字符串連接函數(shù) s

8、trcat 函數(shù)原型為:函數(shù)原型為:strcat(char,const char);或或 char *strcat(char *strdest,const char *strscr);函數(shù)的作用:函數(shù)的作用:將第二個字符數(shù)組中的字符串連接到第一個字符數(shù)組的字符串的后面。第二個字符數(shù)組被指定為const,以保證該數(shù)組中的內(nèi)容不會在函數(shù)調(diào)用期間修改。連接后的字符串放在第一個字符數(shù)組中,函數(shù)調(diào)用后得到的函數(shù)值,就是第一個字符數(shù)組的地址。第第5章章 數(shù)組數(shù)組例如char str130=Peoples Republic of ;char str2 =China;coutstrcat(str1,str2)

9、; /調(diào)用strcat函數(shù)coutstr1;輸出:Peoples Republic of ChinaPeoples Republic of China連接前后的狀況如圖5.10所示。圖5.10兩參數(shù)均可為字符數(shù)組兩參數(shù)均可為字符數(shù)組(字符指針字符指針)或字符串或字符串第第5章章 數(shù)組數(shù)組2. 字符串復(fù)制函數(shù)字符串復(fù)制函數(shù)strcpy函數(shù)原型:函數(shù)原型:strcpy(char,const char);作用:作用:把第2個字符數(shù)組中的字符串復(fù)制到第1個字符數(shù)組中。例如char str110;char str2 =Chinese; coutstrcpy(str1,str2)endl;coutstr1

10、 字符串字符串str2,函數(shù)值為一,函數(shù)值為一正整數(shù)正整數(shù)字符串字符串str1 bye、 yesye注意注意:字符串只能用字符串只能用strcmp函數(shù)比較,不能用關(guān)系運算函數(shù)比較,不能用關(guān)系運算符比較。即符比較。即不能用以下形式:if(str1str2) cout0) coutyes; 第第5章章 數(shù)組數(shù)組4. 字符串長度函數(shù)字符串長度函數(shù)strlen 函數(shù)原型:函數(shù)原型:strlen(const char);測試字符串長度,其函數(shù)的值為字符串中的實際長度,不包括0在內(nèi)。如char str10=China;coutstrlen(str);輸出結(jié)果是5。5. 字符串輸入函數(shù)字符串輸入函數(shù)gets

11、(函數(shù)原型在stdio.h中)函數(shù)原型:函數(shù)原型: gets(char);輸入字符串到數(shù)組,直到接收到換行符(回車)為止??捎糜谳斎霂в锌崭竦淖址?char str12; gets(str);/將輸入的一行字符賦給字符數(shù)組str第第5章章 數(shù)組數(shù)組5.5.6 字符數(shù)組應(yīng)用舉例字符數(shù)組應(yīng)用舉例例例5.10有3個國家名,找出最前面的國家。要用函數(shù)調(diào)用。程序如下:主函數(shù)輸入數(shù)據(jù),被調(diào)函數(shù)找出并輸出最前者#include #include using namespace std;int main( )void smallest_string(char str 30,int i); /函數(shù)聲明

12、int i; char country_name330;/定義二維字符數(shù)組 for(i=0;icountry_namei; /輸入3個國家名 smallest_string(country_name,3); /調(diào)用smallest_string函數(shù) return 0; 二維字符數(shù)組名調(diào)用二維數(shù)組一維下標(biāo)作字符數(shù)組名第第5章章 數(shù)組數(shù)組void smallest_string(char str 30,int n) /尋找最小字符串int i; char string30;/存放最小字符串 strcpy(string,str0); /先使str0為最小字符串 for(i=1;in;i+) if(s

13、trcmp(stri,string)0) strcpy(string,stri); / 如果stristring復(fù)制到string coutendlthe smallest string is: stringendl;運行結(jié)果如下:CHINAGERMANYFRANCHthe smallest string is: CHINA第第5章章 數(shù)組數(shù)組程序中for(i=0;icountry_namei; /輸入3個國家名這里,這里,country_namei是一個一維數(shù)組名是一個一維數(shù)組名。例如把str看作是一個一維字符數(shù)組,有3個元素str0 str1 str2,每個元素是一個包含20個元素的一維數(shù)

14、組。此時,輸入字符串中不能含有空格,若有空格可用gets函數(shù)for(i=0;i 字符數(shù)組,利用循環(huán)判斷。字符數(shù)組,利用循環(huán)判斷。算法分析:單詞的數(shù)目可由空格出現(xiàn)的次數(shù)決定。1.設(shè)變量num統(tǒng)計單詞個數(shù),初值為0。2.設(shè)變量word判別前字符是否空格,是空格word0,否則word1, word初值0。第第5章章 數(shù)組數(shù)組算法N-S圖:第第5章章 數(shù)組數(shù)組程序如下:#include #include /gets()函數(shù)在stdio.h頭文件中void main() char string81; /存放輸入的一行字符,80/行 int i,num=0,word=0; char c; gets(st

15、ring); /用gets函數(shù)輸入一行字符 for(i=0;(c=stringi)!=0;i+) if(c= ) word=0; else if(word=0) word=1; num+; coutThere are num words in the line;第第5章章 數(shù)組數(shù)組*5.6 C+處理字符串的方法處理字符串的方法 字符串類與字符串變量字符串類與字符串變量用字符數(shù)組存放字符串并不是最理想和最安全的方法。例如,連接或復(fù)制字符串時,長度超過數(shù)組的長度,會發(fā)生數(shù)組越界錯誤,就可能破壞系統(tǒng)的正常工作狀態(tài)。C+提供了字符串類型(string類型),在使用方法上,它和char、int類型一樣,

16、可以用來定義變量,這就是字符串變字符串變量量用一個名字代表一個字符串用一個名字代表一個字符串。string類型并不是C+語言本身具有的基本類型,它是在C+標(biāo)準(zhǔn)庫中標(biāo)準(zhǔn)庫中聲明的一個字符串類字符串類,用它可以定義對象。每一個字符串變量都是string類的一個對象。第第5章章 數(shù)組數(shù)組C+給 string對象定義了許多處理字符串的運算符,這些運算符允許在一般表達(dá)式中使用string對象。C+支持的字符串運算符如下:運算符含義+=!= 賦值連接連接并賦值等于不等于小于小于或等于大于大于或等于下標(biāo)輸出輸入第第5章章 數(shù)組數(shù)組5.6.1 字符串變量的定義和引用字符串變量的定義和引用使用使用string類

17、的功能類的功能時,要在本文件的開頭將C+標(biāo)準(zhǔn)庫中的string頭文件包含進(jìn)來頭文件包含進(jìn)來。即應(yīng)加上#include 1. 定義字符串變量及初始化定義字符串變量及初始化字符串變量也必須先定義后使用,定義字符串變量要用類名string。如string string1; /定義string1為字符串變量string string2=“China”; /定義string2同時初始化在定義字符串變量字符串變量時不需指定長度,長度隨賦值的字長度隨賦值的字符串長度而改變符串長度而改變。說明:用string類定義字符串變量在Visual C+ 6.0可以使用,GCC(Turbo C3.0+)不能通過。第第5

18、章章 數(shù)組數(shù)組2. 對字符串變量的賦值對字符串變量的賦值1) 定義了字符串變量后,可以用賦值語句可以用賦值語句對它賦予一個字符串常量,如string1=Canada;也可以用一個字符串變量給另一個字符串變量賦值。如 string2=string1; /string2和string1均為字符串變量此時,字符串變量字符串變量string2長度,隨字符串變量長度,隨字符串變量string1的的字符串長度而改變長度而改變。2) 也可以對字符串變量中某一字符進(jìn)行操作,如 string word=Then; /定義并初始化字符串變量wordword2=a; /修改后word的值為“Than”第第5章章 數(shù)

19、組數(shù)組3. 字符串變量的輸入輸出字符串變量的輸入輸出可以在輸入輸出語句中用字符串變量名來輸入輸出字符串,如cin string1; /從鍵盤輸入一個字符串string1(輸入的字符串可以包含空格)cout string2; /將字符串string2輸出第第5章章 數(shù)組數(shù)組5.6.2 字符串變量的運算字符串變量的運算在字符數(shù)組存放字符串時,字符串的運算要用字符串函數(shù),strcmp(比較)、strcpy(復(fù)制)。對字符串變量,可以直接用對字符串變量,可以直接用C+字符串運算符字符串運算符。(1) 字符串復(fù)制用賦值號string1=string2; /string1、string2為字符串變量其作用

20、與“strcpy(string1,string2);”相同。(2) 字符串連接用加號string string1=C+; /定義string1并賦初值string string2=Language; /定義string2并賦初值string1=string1 + string2; /連接后為C+ Language(3) 字符串比較直接用關(guān)系運算符string1=string2;顯然,使用這些運算符比使用字符串函數(shù)直觀而方便。第第5章章 數(shù)組數(shù)組5.6.3 字符串?dāng)?shù)組字符串?dāng)?shù)組也可以用string定義字符串?dāng)?shù)組。如string name5; /定義一個含5個字符串的字符串?dāng)?shù)組string nam

21、e5=Zhang,Li,Fun,Wang,Tan; /定義一個字符串?dāng)?shù)組并初始化此時name數(shù)組的狀況如圖5.11所示。圖5.11第第5章章 數(shù)組數(shù)組由上可以看到:(1) 在字符串?dāng)?shù)組的每一個元素中存放一個字符串,而不是一個字符,這是字符串?dāng)?shù)組與字符數(shù)組的區(qū)別。(2) 在一個字符串?dāng)?shù)組中包含若干個元素,每個元素相當(dāng)于一個字符串變量。(3) 并不要求每個字符串元素具有相同的長度,即使對同一個元素而言,它的長度也是可以變化的,當(dāng)向某一個元素重新賦值,其長度就可能發(fā)生變化。可見用字符串?dāng)?shù)組存放字符串以及對字符串進(jìn)行處理簡單、方便、直觀,提高了效率。第第5章章 數(shù)組數(shù)組5.6.4 字符串運算舉例字符串

22、運算舉例例例5.11 輸入3個字符串,按由小到大的順序輸出。int main( )string string1,string2,string3,temp; coutstring1string2string3; /輸入3個字符串 if(string2string3) temp=string2;string2=string3;string3=temp; /使串2串3 if(string1=string2) /如果串1串2,則串1串2串3 coutstring1 string2 string3endl; else if(string1=string3) /串1串2且串1串3,則串2串1串3 cout

23、string2 string1 string3endl; else coutstring2 string3 string1endl; /串1串2且串1串3,則串2串3串1 第第5章章 數(shù)組數(shù)組例例5.12 一個班有n個學(xué)生,把每個學(xué)生的姓名和學(xué)號輸入計算機(jī)保存。通過輸入某一學(xué)生的姓名查找其有關(guān)資料,如果有,則輸出他的姓名和學(xué)號;如果查不到,則輸出“本班無此人”。編寫兩個函數(shù),函數(shù)input_data用來輸入n個學(xué)生的姓名和學(xué)號,函數(shù)search用來查找要找的學(xué)生是否在本班。程序可編寫如下: #include #include using namespace std;string name50,

24、num50; /定義兩個字符串?dāng)?shù)組,分別存放姓名和學(xué)號int n; /n是實際的學(xué)生數(shù),全局變量第第5章章 數(shù)組數(shù)組int main( )void input_data( ); /輸入函數(shù)聲明 void search(string find_name); /查找函數(shù)聲明 string find_name; /find_name存放要找的學(xué)生 coutn; /輸入學(xué)生數(shù) input_data( ); /調(diào)用input_data函數(shù),輸入學(xué)生數(shù)據(jù) coutfind_name; /輸入要找的學(xué)生的姓名 search(find_name); /調(diào)用search函數(shù),尋找該學(xué)生姓名 return 0;第第5章章 數(shù)組數(shù)組void input_data( ) /輸入函數(shù)int i; for (i=0;in;i+) coutinput name and NO. of studenti+1nameinumi; /輸入n個學(xué)生的姓名和學(xué)號 void search(string find_name) /查找函數(shù)int i; bool flag=false;/找到為真true,初始值為沒找到false for(i=0;in;i+) if(namei=find_name) /如果找到,輸出該學(xué)生姓名與學(xué)號 coutnameihas be

溫馨提示

  • 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

提交評論