版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44985.4-2024農(nóng)業(yè)物聯(lián)網(wǎng)通用技術(shù)要求第4部分:畜禽養(yǎng)殖
- GB/T 21551.6-2024家用和類似用途電器的抗菌、除菌、凈化功能第6部分:空調(diào)器的特殊要求
- 2025年度大型水利工程采砂廠承包權(quán)轉(zhuǎn)讓合同范本3篇
- 二零二五版國(guó)際貿(mào)易合同主體欺詐責(zé)任劃分與損害賠償合同3篇
- 2025年度鮮羊奶品牌授權(quán)及區(qū)域代理銷售合同范本3篇
- 2025年度出租車行業(yè)駕駛員權(quán)益保護(hù)合作協(xié)議3篇
- 2024版加油站柴油訂貨與銷售協(xié)議范例版B版
- 專業(yè)水泥銷售協(xié)議:2024版細(xì)則版A版
- 二零二五年度高壓電纜敷設(shè)與維護(hù)保養(yǎng)合同大全3篇
- 2024版吉陽(yáng)區(qū)環(huán)衛(wèi)設(shè)施安全檢查評(píng)估合同
- 危險(xiǎn)性較大分部分項(xiàng)工程及施工現(xiàn)場(chǎng)易發(fā)生重大事故的部位、環(huán)節(jié)的預(yù)防監(jiān)控措施
- 繼電保護(hù)試題庫(kù)(含參考答案)
- 《榜樣9》觀后感心得體會(huì)四
- 2023事業(yè)單位筆試《公共基礎(chǔ)知識(shí)》備考題庫(kù)(含答案)
- 《水下拋石基床振動(dòng)夯實(shí)及整平施工規(guī)程》
- 2025年云南大理州工業(yè)投資(集團(tuán))限公司招聘31人管理單位筆試遴選500模擬題附帶答案詳解
- 風(fēng)電危險(xiǎn)源辨識(shí)及控制措施
- 《教師職業(yè)道德與政策法規(guī)》課程教學(xué)大綱
- 兒童傳染病預(yù)防課件
- 護(hù)理組長(zhǎng)年底述職報(bào)告
- 《住院患者身體約束的護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀課件
評(píng)論
0/150
提交評(píng)論