《C語(yǔ)言程序設(shè)計(jì)》課件4第8章_第1頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》課件4第8章_第2頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》課件4第8章_第3頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》課件4第8章_第4頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》課件4第8章_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章字符數(shù)組與字符串8.1字符數(shù)組的定義8.2字符數(shù)組的初始化8.3字符數(shù)組的引用8.4字符串8.5常用字符串處理函數(shù)8.6案例學(xué)習(xí)

8.1字符數(shù)組的定義

用來(lái)存放字符常量的數(shù)組稱為字符數(shù)組,字符數(shù)組的定義形式與前面介紹的數(shù)值型數(shù)組的定義形式十分類似,其一般形式可表示為:

char數(shù)組名[常量表達(dá)式]

【例8-1】以下程序的輸出結(jié)果是()。答案:B。

(2)字符數(shù)組也可以定義為二維或多維數(shù)組。例如:

charc[5][10];

即定義了一個(gè)二維字符數(shù)組,其數(shù)組元素為字符型,數(shù)組名為c,其結(jié)構(gòu)為5行10列。和數(shù)值型數(shù)組一樣,數(shù)組c也可以看成是由5個(gè)含有10個(gè)數(shù)組元素的一維字符數(shù)組組成的數(shù)組。

chard[2][3][2];

定義了一個(gè)三維字符數(shù)組,數(shù)組名為d。同樣,數(shù)組d也可以看成是由2個(gè)3行2列的二維字符數(shù)組組成的數(shù)組。

8.2字符數(shù)組的初始化

1.一次性賦值

和數(shù)值數(shù)組一次性賦值一樣,字符數(shù)組一次性賦值是指在定義數(shù)組的過(guò)程中,在一對(duì)大括號(hào)中分別給出數(shù)組元素的值。

【例8-2】一次性賦值實(shí)例。圖8.1例8-2運(yùn)行結(jié)果以下定義了一個(gè)一維字符數(shù)組,其有10個(gè)數(shù)組元素,賦值后各元素的值如圖8.2所示。圖8.2數(shù)組內(nèi)容圖示

2.逐元素賦值

和數(shù)值數(shù)組一樣,字符數(shù)組的逐元素賦值指在定義字符數(shù)組后,分別對(duì)字符數(shù)組的每一個(gè)元素分別賦值。

【例8-3】逐元素賦值實(shí)例。圖8.3例8-3運(yùn)行結(jié)果

3.用循環(huán)語(yǔ)句賦值

【例8-4】定義一字符數(shù)組,用循環(huán)語(yǔ)句實(shí)現(xiàn)對(duì)字符數(shù)組賦值。圖8.4例8-4運(yùn)行結(jié)果

4.字符串常量賦值

例如:

charstr[10]={"china"};

其在內(nèi)存中的存儲(chǔ)形式str[0]為'c'str[1]為'h',str[2]為'i',str[3]為'n',str[4]為'a'。

【例8-5】從鍵盤上輸入一個(gè)國(guó)家的首都,然后在屏幕上顯示。圖8.5例8-5運(yùn)行結(jié)果

【例8-6】以下說(shuō)法正確的是()。

A.已定義charc[]={“china”};,要將所有的字符輸出的語(yǔ)句是:printf(“%s”,&c);

B.已定義charc[]={“china”};,要將所有的字符輸出的語(yǔ)句是:printf(“%s”,c[0]);

C.‘a(chǎn)’和“a”所占的存儲(chǔ)空間是不一樣的

D.‘a(chǎn)’和“a”所占的存儲(chǔ)空間是一樣的

答案:C。

8.3字符數(shù)組的引用

8.3.1字符數(shù)組的引用格式

字符數(shù)組的引用格式與普通數(shù)組完全相同,其一般形式可表示為:

字符數(shù)組名[下標(biāo)];

注意:

(1)和數(shù)值數(shù)組一樣,字符數(shù)組的下標(biāo)引用從0開(kāi)始。

(2)如果是二維數(shù)組或高維數(shù)組,則有兩個(gè)或兩個(gè)以上的下標(biāo)。

【例8-7】以下程序的輸出結(jié)果為()。

【例8-8】有3個(gè)字符串s1,s2和s3,其中s1=“abcdef”;,s2=“12345”;用字符數(shù)組實(shí)現(xiàn)將s1的內(nèi)容復(fù)制到s3中,再將s2的內(nèi)容添加到s3的后面,最后輸出字串s3。

解析:因?yàn)樵贑語(yǔ)言中沒(méi)有關(guān)于字符串的變量,因此對(duì)于字符串的操作必須要用字符數(shù)組實(shí)現(xiàn),故首先須定義三個(gè)字符數(shù)組,同時(shí)考慮到第三個(gè)字符串的長(zhǎng)度要能容納字符串1和字符串2。程序源代碼如下:圖8.6例8-8運(yùn)行結(jié)果8.3.2字符數(shù)組的輸入與輸出

1.逐個(gè)字符操作

用scanf()函數(shù)結(jié)合格式控制符“%c”可實(shí)現(xiàn)逐個(gè)字符的輸入,用printf()函數(shù)結(jié)合格式控制符“%c”可實(shí)現(xiàn)逐個(gè)字符的輸出。

【例8-9】逐個(gè)字符的輸入實(shí)例。圖8.7例8-9運(yùn)行結(jié)果

2.將整個(gè)字符串一次輸入或輸出

用scanf()函數(shù)結(jié)合“%s”可實(shí)現(xiàn)字符串的輸入,用printf()函數(shù)結(jié)合“%s”可實(shí)現(xiàn)字符串的輸出。

【例8-10】字符串的輸入和輸出。圖8.8例8-10運(yùn)行結(jié)果

【例8-11】二維字符數(shù)組引用實(shí)例。圖8.9例8-11運(yùn)行結(jié)果

8.4字符串

8.4.1字符串的基本概念

1.C語(yǔ)言對(duì)字符串的約定

字符串指若干有效字符組成的序列。所謂有效字符是指系統(tǒng)允許使用的字符,不同的系統(tǒng)允許使用的字符是不相同的。C語(yǔ)言中的字符串可以包括字母、數(shù)字、專用字符、轉(zhuǎn)義字符等。例如,下面都是合法的字符串:

"china","basic","a+b=c","32.8"

2.C語(yǔ)言中表示字符串常量的約定

雖然C語(yǔ)言中沒(méi)有提供字符串?dāng)?shù)據(jù)類型,但卻允許使用字符串常量。在前面的介紹中我們提到,字符串常量是由雙引號(hào)括起來(lái)的一串字符,在表示字符串常量時(shí),不需要人為地在其末尾加入?'\0',例如:字符串常量“hello!”不必寫成“hello!\0”,C編譯程序?qū)⒆詣?dòng)完成這一工作,在末尾添加字符串結(jié)束標(biāo)記?'\0'。

3.C語(yǔ)言中字符串常量給出的是地址值

每一個(gè)字符串常量都分別占用內(nèi)存中一串連續(xù)的存儲(chǔ)空間,這些連續(xù)的存儲(chǔ)空間實(shí)際上就是字符型一維數(shù)組。這些數(shù)組雖然沒(méi)有名字,但C編譯系統(tǒng)卻以字符串常量的形式給出存放每一字符串的存儲(chǔ)空間的首地址。不同的字符串具有不同的起始地址。也就是說(shuō):在C語(yǔ)言中,字符串常量被隱含處理成一個(gè)以?'\0'?結(jié)尾的無(wú)名字符型一維數(shù)組。因此,若有以下定義:

chars[10];

則以下賦值是不合法的:

s=“hello”;

因?yàn)?,字符串常量在賦值過(guò)程中給出的是這個(gè)字符串在內(nèi)存中所占的一串連續(xù)存儲(chǔ)單元(無(wú)名一維字符數(shù)組)的首地址,而s是一個(gè)不可重新賦值的數(shù)組名。

4.字符數(shù)組與字符串的區(qū)別

字符數(shù)組的每個(gè)元素中可存放一個(gè)字符,但它并不限定最后一個(gè)字符應(yīng)該是什么。而在C語(yǔ)言中,因?yàn)橛嘘P(guān)字符串的大量操作都與串結(jié)束標(biāo)志?'\0'?有關(guān),因此,在字符數(shù)組中的有效字符后面加上?'\0'?這一特定情況下,可以把這種一維字符型數(shù)組看做字符串變量,但它又不等同于一般的變量。如上所述,在字符數(shù)組內(nèi)僅可以存放字符串,不能通過(guò)賦值語(yǔ)句將字符串常量或其他字符數(shù)組中的字符串直接賦值給字符串變量。可以這樣說(shuō):字符串是字符數(shù)組的一種具體應(yīng)用。8.4.2用一維字符數(shù)組存放字符串

1.用給一般數(shù)組賦初值的方式給一維字符數(shù)組賦初值

前面我們已經(jīng)介紹了給一維數(shù)組賦初值的方法,包括一次性賦值、逐元素賦值及用循環(huán)語(yǔ)句賦值等,例如:

charstr[10]={'s','t','r','i','n','g’,'!','\0'};

賦初值后,字符數(shù)組str中的內(nèi)容如下所示:

2.在賦初值時(shí)直接賦字符串常量

前面我們提到,C語(yǔ)言允許用字符串的方式對(duì)數(shù)組作初始化賦值。例如:

charc[]={‘C’,‘’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a(chǎn)’,‘m’,‘\0’};

這條對(duì)字符數(shù)組賦值的語(yǔ)句也可以改寫為:

charc[]={“Cprogram”};

或去掉{}改寫為:

charc[]=“Cprogram”;

數(shù)組c在內(nèi)存中的實(shí)際存放情況為:

3.不可以用賦值語(yǔ)句給字符數(shù)組整體賦一串字符

當(dāng)作字符串變量使用的字符數(shù)組,不能由賦值語(yǔ)句直接賦字符串常量。例如:

charmark[10];

mark=“cprogram”; /*賦值不合法*/

以上賦值形式是不允許的,因?yàn)樽址A拷o出的是地址值,而數(shù)組名mark是一個(gè)地址常量,不能被重新賦值。同理,以下賦值方式也是錯(cuò)誤的:

charstr1[10]=“computer”,str2[10];

str2=str1; /*賦值不合法*/

4.給數(shù)組元素逐個(gè)賦字符值,最后人為加入串結(jié)束標(biāo)志

利用目前學(xué)過(guò)的知識(shí),在程序執(zhí)行過(guò)程中,可以通過(guò)逐個(gè)給數(shù)組元素賦值的方式,達(dá)到給一維字符數(shù)組賦字符串的目的。例如:也可以通過(guò)給一維字符數(shù)組輸入字符并在最后加?'\0'?的方式,給一維字符數(shù)組賦字符串,例如:

5.用格式說(shuō)明符%s進(jìn)行整串輸入

在scanf函數(shù)中使用格式說(shuō)明符%s可以實(shí)現(xiàn)字符串的整體輸入。函數(shù)調(diào)用形式如下:

scanf(“%s”,str_adr);

這里str_adr是地址值。調(diào)用此函數(shù)時(shí),輸入字符依次放入以這一地址為起點(diǎn)的存儲(chǔ)單元中,并自動(dòng)在末尾加‘\0’。str_adr可以是字符數(shù)組名、字符數(shù)組元素的地址或字符指針變量。例如:

charstr[15];

scanf("%s",str);

6.在printf()函數(shù)中,使用格式說(shuō)明符?%s進(jìn)行整串輸出

函數(shù)調(diào)用形式如下:

printf("%s",str_adr);

8.5常用字符串處理函數(shù)

8.5.1字符串輸出函數(shù)puts

格式:

puts(字符數(shù)組名)

功能:把字符數(shù)組中的字符串輸出到顯示器上,即在屏幕上顯示該字符串?!纠?-12】puts函數(shù)應(yīng)用示例。圖8.10例8-12運(yùn)行結(jié)果8.5.2字符串輸入函數(shù)gets

格式:

gets(字符數(shù)組名)

功能:從標(biāo)準(zhǔn)輸入設(shè)備鍵盤上輸入一個(gè)字符串,存儲(chǔ)到指定數(shù)組中。本函數(shù)得到一個(gè)函數(shù)值,即為該字符數(shù)組的首地址。

【例8-13】get函數(shù)應(yīng)用示例。圖8.11例8-13運(yùn)行結(jié)果8.5.3字符串連接函數(shù)strcat

格式:

strcat(字符數(shù)組名1,字符數(shù)組名2)

功能:把字符數(shù)組2中的字符串連接到字符數(shù)組1中字符串的后面,并刪去字符串1后的串標(biāo)志'\0'。本函數(shù)返回值是字符數(shù)組1的首地址。

【例8-14】strcat函數(shù)應(yīng)用示例。圖8.12例8-14運(yùn)行結(jié)果8.5.4字符串拷貝函數(shù)strcpy

格式:

strcpy(字符數(shù)組名1,字符數(shù)組名2)

功能:把字符數(shù)組2中的字符串拷貝到字符數(shù)組1中。串結(jié)束標(biāo)志'\0'也一同拷貝。字符數(shù)組名2也可以是一個(gè)字符串常量。這時(shí)相當(dāng)于把一個(gè)字符串賦予一個(gè)字符數(shù)組。

【例8-15】strcpy函數(shù)應(yīng)用示例。圖8.13例8-15運(yùn)行結(jié)果8.5.5字符串比較函數(shù)strcmp

格式:

strcmp(字符數(shù)組名1,字符數(shù)組名2)

功能:按照ASCII碼順序比較兩個(gè)數(shù)組中的字符串,并由函數(shù)返回值返回比較結(jié)果。

字符串1?=?字符串2,返回值=0;

字符串1>字符串2,返回值>0;

字符串1<字符串2,返回值<0。

本函數(shù)也可用于比較兩個(gè)字符串常量,或比較數(shù)組和字符串常量。

【例8-16】strcmp函數(shù)應(yīng)用示例。圖8.14例8-16運(yùn)行結(jié)果8.5.6測(cè)字符串長(zhǎng)度函數(shù)strlen

格式:

strlen(字符數(shù)組名)

功能:測(cè)字符串的實(shí)際長(zhǎng)度(不含字符串結(jié)束標(biāo)志'\0')并將其作為函數(shù)返回值。

【例8-17】strlen函數(shù)應(yīng)用示例。圖8.15例8-17運(yùn)行結(jié)果

8.6案例學(xué)習(xí)

【例8-18】有3個(gè)字符串s1,s2和s3,其中s1=“abcdef”;s2=“12345”;用字符數(shù)組實(shí)現(xiàn)將s1的內(nèi)容復(fù)制到s3中,再將s2的內(nèi)容添加到s3的后面,最后輸出字符串s3。

本題涉及三個(gè)字符串,而字符串在C語(yǔ)言中沒(méi)有專門的數(shù)據(jù)類型,因此,考慮定義三個(gè)字符數(shù)組s1,s2和s3來(lái)分別存儲(chǔ)三個(gè)字符串,然后將s1和s2字符數(shù)組的內(nèi)容依次添加到s3字符串中,最后

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論