![計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言程序設(shè)計(jì)第10章字符串_第1頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/31/a469f067-8a97-4c19-9a70-a9ad36f3382e/a469f067-8a97-4c19-9a70-a9ad36f3382e1.gif)
![計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言程序設(shè)計(jì)第10章字符串_第2頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/31/a469f067-8a97-4c19-9a70-a9ad36f3382e/a469f067-8a97-4c19-9a70-a9ad36f3382e2.gif)
![計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言程序設(shè)計(jì)第10章字符串_第3頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/31/a469f067-8a97-4c19-9a70-a9ad36f3382e/a469f067-8a97-4c19-9a70-a9ad36f3382e3.gif)
![計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言程序設(shè)計(jì)第10章字符串_第4頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/31/a469f067-8a97-4c19-9a70-a9ad36f3382e/a469f067-8a97-4c19-9a70-a9ad36f3382e4.gif)
![計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言程序設(shè)計(jì)第10章字符串_第5頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/31/a469f067-8a97-4c19-9a70-a9ad36f3382e/a469f067-8a97-4c19-9a70-a9ad36f3382e5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本章重點(diǎn) 10.1 用一個(gè)一維字符數(shù)組來(lái)存放字符串 10.2 使指針指向一個(gè)字符串 10.3 字符串的輸入和輸出 10.4 字符串?dāng)?shù)組 10.5 用于字符串處理的函數(shù) 10.6 字符數(shù)組和字符串應(yīng)用舉例,第10章 字符串,10.1 用一個(gè)一維字符數(shù)組來(lái)存放字符串 10.1.1 字符串的相關(guān)概念 1字符串定義 C語(yǔ)言本身并沒(méi)有設(shè)置一種類(lèi)型來(lái)定義字符串變量,字符串的存儲(chǔ)完全依賴(lài)于字符數(shù)組。字符串是借助字符型一維數(shù)組來(lái)存放的,以0作為字符串結(jié)束標(biāo)志。0是一個(gè)轉(zhuǎn)義字符,稱(chēng)為“空值”,其ASCII碼值為0。0作為標(biāo)志占用存儲(chǔ)空間,但不計(jì)入字符串的實(shí)際長(zhǎng)度。因此,定義時(shí)不需要人為地在其末尾加入0,編譯程序
2、會(huì)自動(dòng)完成這一工作。,2字符串常量 C語(yǔ)言中,無(wú)字符串?dāng)?shù)據(jù)類(lèi)型,但允許使用字符串常量。C語(yǔ)言中,字符串常量給出的是地址值。不同的字符串具有不同的起始地址。即在C語(yǔ)言中,字符串常量被隱含處理成一個(gè)以0結(jié)尾的無(wú)名字符型一維數(shù)組。 3字符數(shù)組與字符串的區(qū)別 (1)字符數(shù)組的每個(gè)元素中可存放一個(gè)字符,但它并不限定最后一個(gè)字符應(yīng)該是什么。,(2)在字符數(shù)組中的有效字符后面加上0 把這種一維字符型數(shù)組“看做”字符串變量,但它又不同于一般的變量,僅可以在字符數(shù)組內(nèi)存放字符串,不能通過(guò)賦值語(yǔ)句將字符串常量或其它字符數(shù)組中的字符串直接賦給字符串變量。 (3)字符串是字符數(shù)組的一種具體應(yīng)用。 10.1.2 通過(guò)賦
3、初值的方式給一維字符數(shù)組賦字符串 1字符數(shù)組的定義 字符數(shù)組的定義與一般數(shù)組的定義類(lèi)似。其一般定義形式為:char 數(shù)組名常量表達(dá)式;,其中,char是字符數(shù)組的類(lèi)型,常量表達(dá)式給出字符數(shù)組長(zhǎng)度即字符個(gè)數(shù),每個(gè)數(shù)組元素是一個(gè)字符。例如: char str10; 定義str為字符數(shù)組,它包括10個(gè)元素,可以存放10個(gè)字符。 2用給以一般數(shù)組賦初值的相同方式給一維字符數(shù)組賦初值 按照一維數(shù)組的賦初值的方式,把初值依次放入一對(duì)花括號(hào)內(nèi),3在賦初值時(shí)直接賦字符串常量 可以直接用字符串常量給一維數(shù)組賦初值,例如: char str10=“string”; 或 char str10= “string”;
4、此時(shí),由于“string”是字符串常量,系統(tǒng)已自動(dòng)在最后加入了0。若有如下定義: char str = “string”; 則數(shù)組str將包含7個(gè)元素。,4在C程序執(zhí)行過(guò)程中給字符數(shù)組賦字符串 在程序執(zhí)行過(guò)程中,可以通過(guò)逐個(gè)給數(shù)組元素賦值的方式,給一維字符數(shù)組賦字符串。例如: char str5; str0=g; str1=o; str2=o; str3=d; str4=0;,10.2 使指針指向一個(gè)字符串 10.2.1 通過(guò)賦初值的方式使指針指向一個(gè)字符串 可以在定義字符指針變量的同時(shí),將存放字符串的存儲(chǔ)單元起始地址賦給指針變量。也可以先定義一個(gè)存放字符串的字符數(shù)組,并將數(shù)組的首字地址賦給指
5、針變量。 10.2.2 通過(guò)賦值運(yùn)算使指針指向一個(gè)字符串 若已定義一個(gè)字符指針變量,可以通過(guò)賦值運(yùn)算將某個(gè)字符串的起始地址賦給它,從而使其指向一個(gè)具體的字符串,10.2.3 通過(guò)賦值運(yùn)算使指針指向一個(gè)字符串 若有以下定義: char array=hello!; char *parray=hello!; 雖然字符串的內(nèi)容相同,但它們占有不同的存儲(chǔ)空間。 (1)mark是一個(gè)字符數(shù)組,通過(guò)賦初值,系統(tǒng)為它開(kāi)辟了剛好存放以上字符序列再加0的存儲(chǔ)空間(10個(gè)字符)。而pmark是一個(gè)字符指針,通過(guò)賦初值,使其指向一個(gè)字符串常量。 (2)在這個(gè)數(shù)組內(nèi),字符串的內(nèi)容可以改變,但array總是引用固定的存儲(chǔ)
6、空間,最多只能存放有6個(gè)字符的字符串。,10.3 字符串的輸入和輸出 10.3.1 輸入和輸出字符串時(shí)的必要條件 1對(duì)字符串進(jìn)行輸出時(shí),輸出項(xiàng)既可以是字符串或字符數(shù)組名,也可以是已指向字符串得字符指針變量。 2對(duì)字符串進(jìn)行輸入時(shí),輸入項(xiàng)可以是字符數(shù)組名,也可以是字符型指針。前者輸入的字符串將存放在字符數(shù)組中,因而字符數(shù)組應(yīng)具有足夠的存儲(chǔ)空間。而對(duì)于后者,字符指針必須指向確切的足夠大的存儲(chǔ)空間,以便輸入的字符串能購(gòu)存放在其所指向的具體的內(nèi)存單元中。,10.3.2 字符串的輸入 除了可以用初始化的方法使字符數(shù)組得到確定的初值以外,還可以通過(guò)scanf函數(shù)或gets函數(shù)輸入字符或字符串。通常有以下三
7、種方法。 1使用格式符”%c”,通過(guò)scanf函數(shù),逐個(gè)字符輸入。如例: char c10; scanf(“%c”, scanf(“%s”,c); 從鍵盤(pán)輸入: student 系統(tǒng)把回車(chē)鍵前面的字符作為字符串存入c數(shù)組,并自動(dòng)在后面加一個(gè)0結(jié)束符。這時(shí)輸入給c數(shù)組的字符個(gè)數(shù)是8而不是7。,3使用專(zhuān)門(mén)的標(biāo)準(zhǔn)字符串輸入函數(shù)gets,將整個(gè)字符串一次輸入。調(diào)用方式為: gets(字符數(shù)組); (1)gets函數(shù)屬于標(biāo)準(zhǔn)輸入輸出函數(shù)類(lèi),調(diào)用時(shí)應(yīng)使用”stdio.h”頭文件做函數(shù)說(shuō)明。 (2)用gets函數(shù)只能輸入一個(gè)字符串。,10.3.3 字符串的輸出 字符串(或字符數(shù)組)的輸出可以通過(guò)printf
8、函數(shù)及puts函數(shù)實(shí)現(xiàn)。通常有三種方法。 1使用格式符”%c”,通過(guò)printf函數(shù),引用字符串中的單個(gè)字符,逐個(gè)字符輸出。 2使用格式符”%s”,通過(guò)printf函數(shù),將整個(gè)字符串一次輸出。例如: char c=“good”; printf(“%s”,c); 。,輸出時(shí),遇到結(jié)束符0就停止輸出。 (1)輸出字符串中不包含結(jié)束符0。盡管數(shù)組c中最后一個(gè)元素是0,但并不輸出該字符。 (2)如果數(shù)組長(zhǎng)度大于字符串實(shí)際長(zhǎng)度,也只輸出到遇第一個(gè)0時(shí)就結(jié)束。例如 char c10=“good”; printf(“%s”,c); 也只輸出“good”4個(gè)字符,而不輸出10個(gè)字符(數(shù)組長(zhǎng)度)。,(3)使用格
9、式符”%s”輸出字符串時(shí),printf函數(shù)中的輸出項(xiàng)是字符數(shù)組名,并不是數(shù)組元素。 (4)如果printf中輸入項(xiàng)字符數(shù)組中包含一個(gè)以上0字符,則輸出遇到第一個(gè)0時(shí)就結(jié)束。輸出時(shí),遇到結(jié)束符0就停止輸出。 (1)輸出字符串中不包含結(jié)束符0。盡管數(shù)組c中最后一個(gè)元素是0,但并不輸出該字符。 (2)如果數(shù)組長(zhǎng)度大于字符串實(shí)際長(zhǎng)度,也只輸出到遇第一個(gè)0時(shí)就結(jié)束。例如 char c10=“good”; printf(“%s”,c);,也只輸出“good”4個(gè)字符,而不輸出10個(gè)字符(數(shù)組長(zhǎng)度)。 (3)使用格式符”%s”輸出字符串時(shí),printf函數(shù)中的輸出項(xiàng)是字符數(shù)組名,并不是數(shù)組元素。 (4)如果
10、printf中輸入項(xiàng)字符數(shù)組中包含一個(gè)以上0字符,則輸出遇到第一個(gè)0時(shí)就結(jié)束。 3使用專(zhuān)門(mén)的標(biāo)準(zhǔn)字符串輸出函數(shù)puts,將整個(gè)字符串一次輸出。調(diào)用方式為: puts(str);,將一個(gè)字符串(以0結(jié)束的字符序列)輸出到終端。str是存放待輸出字符串的起始地址。輸出正常時(shí),返回值為字符串的最后一個(gè)字符(也有的系統(tǒng)返回?fù)Q行符或0);輸出出錯(cuò)時(shí),返回EOF。注意,在輸出時(shí)將字符串結(jié)束標(biāo)志0轉(zhuǎn)換成n,即輸出完字符串后自動(dòng)換行。用puts函數(shù)輸出的字符串中可以包含轉(zhuǎn)義字符。,10.4 字符串?dāng)?shù)組 1字符串?dāng)?shù)組的定義 字符串?dāng)?shù)組就是數(shù)組中的每個(gè)元素又都是一個(gè)存放字符串的數(shù)組。例如: char str48=
11、“father”,”mother”,”brother”,”sister”; 數(shù)組str共有4個(gè)元素,每個(gè)元素又可以存放8個(gè)字符。在定義字符串?dāng)?shù)組時(shí)就可以給它賦初值。二維字符數(shù)組的第一個(gè)下標(biāo)決定了字符串的個(gè)數(shù),第二個(gè)下標(biāo)決定了字符串的最大長(zhǎng)度。,上面的定義也可以寫(xiě)成: char str 8= “father”,”mother”,”brother”,”sister”; 存放數(shù)組元素時(shí),各字符串并不是一串緊挨著一串存放,而總是從每行的第0各元素開(kāi)始存放一個(gè)新的字符串??梢酝ㄟ^(guò)二維數(shù)組元素的形式(如strij)來(lái)直接引用字符串中的每個(gè)字符。 2定義字符型指針構(gòu)成類(lèi)似的字符串?dāng)?shù)組 我們還可以通過(guò)定義字符
12、型指針數(shù)組并通過(guò)賦初值來(lái)構(gòu)成一個(gè)類(lèi)似的字符串?dāng)?shù)組。例如: char *p3=“a”,”bb”,”ccc”;,指針數(shù)組p的每個(gè)元素指向一個(gè)字符串,即p的每個(gè)元素中存放著一個(gè)字符串的首地址。 此時(shí),指針元素指向長(zhǎng)度不同的無(wú)名一維字符數(shù)組,各字符數(shù)組之間并不占連續(xù)的存儲(chǔ)單元,它們的聯(lián)系全依賴(lài)與p指針數(shù)組元素,一旦p指針數(shù)組中的元素地址被重新賦值,則相應(yīng)的字符串將丟失。 由于指針數(shù)組元素已指向確定的存儲(chǔ)空間,因此可以用輸入語(yǔ)句給這些字符串重新賦值。如:gets(p2),10.5 用于字符串處理的函數(shù) C語(yǔ)言的庫(kù)函數(shù)中提供了豐富的字符串處理函數(shù),除了上面已介紹的輸入輸出的gets和puts函數(shù)外,還有一
13、些其他專(zhuān)門(mén)字符串處理函數(shù),這些函數(shù)存貯在文件”string.h”中。因此,若使用它們,應(yīng)在程序之前加寫(xiě)如下編譯預(yù)處理語(yǔ)句: #include 下面介紹幾種常用的字符串處理函數(shù)。,1字符串復(fù)制函數(shù) 作用是把一個(gè)字符串全部或部分復(fù)制到另一個(gè)字符串尾部。其基本函數(shù)有兩個(gè)。 (1) strcpy(字符數(shù)組1,字符串2) 功能:把字符串2復(fù)制到字符數(shù)組1中去(即給一個(gè)字符數(shù)組賦值)。 (2)strncpy(字符數(shù)組1,字符串2,n) 此函數(shù)的作用是將字符串2的前n個(gè)字符復(fù)制到字符數(shù)組1中去。,2字符串連接函數(shù) 功能:把兩個(gè)字符串連接在一起,組成一個(gè)字符串。這類(lèi)函數(shù)也有兩個(gè)。 strcat(字符數(shù)組1,字
14、符數(shù)組2) 例如: char str120=hello”; char str2=“everyone”; printf(“%s”,strcat(str1,str2); 輸出:helloeveryone,說(shuō)明: (1)字符數(shù)組1必須足夠大,以便容納連接后的新字符串。 (2)連接前兩個(gè)字符串的后面都有一個(gè)0,連接時(shí)前一個(gè)字符串1的結(jié)束符0被取消,只在新字符串末尾保留一個(gè)0。 strncat(字符數(shù)組1,字符數(shù)組2,n) 該函數(shù)的作用是把字符數(shù)組2上的前n個(gè)字符連接到字符數(shù)組1上,函數(shù)調(diào)用后返回字符數(shù)組1的地址。,3字符串比較函數(shù) 功能:取兩個(gè)字符串的全部或部分按字典順序比較?;竞瘮?shù)有兩個(gè)。 strcmp(字符串1,字符串2) 按字典順序比較字符串1和字符串2,即對(duì)兩個(gè)字符串自左至右逐個(gè)字符相比較(按ASCII碼值大小比較),直到出現(xiàn)不同的字符或遇到0為止。比較結(jié)果返回一個(gè)函數(shù)值。如果: (1)字符串1字符串2,函數(shù)返回值為0。 (2)字符串1字符串2,函數(shù)返回一個(gè)正數(shù)。 (3)字符串1字符串2,函數(shù)返回一個(gè)負(fù)數(shù)。,4字符串長(zhǎng)度測(cè)試函數(shù) strlen(字符串) 功能:測(cè)試字符串的實(shí)際長(zhǎng)度,返回值為字符串的實(shí)際長(zhǎng)度,其中不
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度高端辦公室文件消毒及深度保養(yǎng)合同
- 租賃期間房屋買(mǎi)賣(mài)合同
- 公司之間的借款協(xié)議
- 出租車(chē)停運(yùn)損失上訴狀
- 電器代理合同協(xié)議
- 財(cái)務(wù)管理系統(tǒng)操作與應(yīng)用手冊(cè)指南
- 農(nóng)業(yè)科技行業(yè)現(xiàn)代農(nóng)業(yè)技術(shù)推廣與應(yīng)用策略
- 廣告招牌安裝合同年
- 辦公室租賃合同書(shū)
- 安全事故賠償協(xié)議書(shū)
- 2025年度年度表彰大會(huì)會(huì)議服務(wù)合同
- 親子關(guān)系斷絕協(xié)議書(shū)范文
- (完整版)高考英語(yǔ)詞匯3500詞(精校版)
- 2024年聯(lián)勤保障部隊(duì)第九四〇醫(yī)院社會(huì)招聘筆試真題
- 2024-2025學(xué)年廣東省大灣區(qū)40校高二上學(xué)期聯(lián)考英語(yǔ)試題(含解析)
- 2024中華人民共和國(guó)農(nóng)村集體經(jīng)濟(jì)組織法詳細(xì)解讀課件
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制
- 大學(xué)物理光學(xué)答案
- 關(guān)于教材編寫(xiě)的統(tǒng)一格式的規(guī)定
- 通用標(biāo)準(zhǔn)快裝接頭尺寸表
- 履帶式搜救機(jī)器人機(jī)械結(jié)構(gòu)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論