C語(yǔ)言程序設(shè)計(jì):第5章 同類型數(shù)據(jù)集合_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì):第5章 同類型數(shù)據(jù)集合_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì):第5章 同類型數(shù)據(jù)集合_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì):第5章 同類型數(shù)據(jù)集合_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì):第5章 同類型數(shù)據(jù)集合_第5頁(yè)
已閱讀5頁(yè),還剩51頁(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)介

1、第5章 同類型數(shù)據(jù)集合同類型數(shù)據(jù)集合主要內(nèi)容主要內(nèi)容數(shù)組與數(shù)組元素、一維數(shù)組、二維數(shù)組、多維數(shù)組、字符數(shù)組字符串處理函數(shù)指向字符串的指針變量5.1數(shù)組與數(shù)組元素的概念數(shù)組與數(shù)組元素的概念由若干類型相同的數(shù)據(jù)按一定順序存儲(chǔ)所形成的有序集合,稱為數(shù)組 (Array) 。通常,用某個(gè)名字標(biāo)識(shí)這個(gè)集合,這個(gè)名字稱為數(shù)組名。構(gòu)成數(shù)組的每個(gè)數(shù)據(jù)項(xiàng)稱為數(shù)組的元素,同一數(shù)組中的元素必須具有相同的數(shù)據(jù)類型。同一數(shù)組中的數(shù)組元素在內(nèi)存中占據(jù)的地址空間是連續(xù)的。 數(shù)組定義的一般形式為:類型標(biāo)識(shí)符類型標(biāo)識(shí)符 數(shù)組名數(shù)組名 常量表達(dá)式常量表達(dá)式11常量表達(dá)式常量表達(dá)式22; ;數(shù)組首地址 (1) 數(shù)組的下標(biāo)必須使用整型

2、常量或整型常量表達(dá)式。C語(yǔ)言中不允許用變量作為下標(biāo)作為下標(biāo),對(duì)數(shù)組進(jìn)行動(dòng)態(tài)定義。例如,#define N 10 int nScore N; int n=3;int nScore n; /*不正確的定義方式不正確的定義方式*/(2) C語(yǔ)言規(guī)定數(shù)組的下標(biāo)都是從0開(kāi)始的。 說(shuō)明說(shuō)明(3) 數(shù)組的存儲(chǔ)結(jié)構(gòu):數(shù)組一經(jīng)定義,系統(tǒng)則根據(jù)數(shù)組的數(shù)據(jù)類型為每一個(gè)元素安排相同長(zhǎng)度的、連續(xù)的存儲(chǔ)單元,而且,C語(yǔ)言的數(shù)組在內(nèi)存中是按行存放的,即存完第一行后存第二行,然后存第三行,以此類推。(4) 數(shù)組元素的作用相當(dāng)于簡(jiǎn)單變量。(5) 用sizeof來(lái)計(jì)算類型長(zhǎng)度。說(shuō)明說(shuō)明5.2數(shù)組與數(shù)組元素的概念數(shù)組與數(shù)組元素的概

3、念5.2.1一維數(shù)組的定義一維數(shù)組定義的一般形式為:類型說(shuō)明符類型說(shuō)明符 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式;int a5; 例例5-1 查看數(shù)組查看數(shù)組nArray10的內(nèi)存占用情況。的內(nèi)存占用情況。 問(wèn)題分析問(wèn)題分析通過(guò)不同的輸出方式,能夠看到數(shù)組名通過(guò)不同的輸出方式,能夠看到數(shù)組名(nArray)和和&數(shù)組元數(shù)組元素(素(&nArray0)等表示的含義。)等表示的含義。數(shù)組名數(shù)組名nArray表示數(shù)組表示數(shù)組的首地址,同數(shù)組的首地址,同數(shù)組nArray0的地址相同。的地址相同。不同的數(shù)組類型不同的數(shù)組類型在內(nèi)存中占有的字節(jié)數(shù)不同。在內(nèi)存中占有的字節(jié)數(shù)不同。 程序?qū)崿F(xiàn)程序?qū)崿F(xiàn)

4、5.2.2一維數(shù)組的初始化數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名 數(shù)組元素個(gè)數(shù)數(shù)組元素個(gè)數(shù)=值值1,1,值值2,2,值值n;n;或或 數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名=值值1,1,值值2,2,值值n;n;2. 用賦值語(yǔ)句初始化用賦值語(yǔ)句初始化是在程序執(zhí)行時(shí)實(shí)現(xiàn)的。1. 在數(shù)組定義時(shí)初始化 定義數(shù)組時(shí)對(duì)數(shù)組元素賦初值定義數(shù)組時(shí)對(duì)數(shù)組元素賦初值: int a5=1,2,3,4,5; 只給部分元素賦初值只給部分元素賦初值 對(duì)對(duì)全部元素全部元素賦初值時(shí),可以不指定長(zhǎng)度賦初值時(shí),可以不指定長(zhǎng)度:int a =1,2,3,4,5;int a5=1,2,3;int a5=0;其余元素初值為零其余元素初值為零 程序?qū)崿F(xiàn)

5、程序?qū)崿F(xiàn)例例5-2用賦值語(yǔ)句初始化數(shù)組用賦值語(yǔ)句初始化數(shù)組nNum10,然后,然后按逆序輸出數(shù)組按逆序輸出數(shù)組nNum10中元素。中元素。 問(wèn)題分析問(wèn)題分析輸入一組數(shù),值為09,然后按逆序輸出。 引用形式引用形式 數(shù)組名數(shù)組名下標(biāo)下標(biāo) 說(shuō)明說(shuō)明 下標(biāo)即可以是整型常量或整型表達(dá)式,也可以下標(biāo)即可以是整型常量或整型表達(dá)式,也可以是含有已賦值的整型變量或整型變量表達(dá)式是含有已賦值的整型變量或整型變量表達(dá)式 數(shù)組下標(biāo)范圍為數(shù)組下標(biāo)范圍為0(N-1)(N為數(shù)組長(zhǎng)度為數(shù)組長(zhǎng)度) 注意:防止數(shù)組下標(biāo)越界注意:防止數(shù)組下標(biāo)越界 舉例舉例 a0=a5+aj*3;5.2.3 一維數(shù)組的引用一維數(shù)組的引用 例:例:

6、 int data5; data5=10; C語(yǔ)言對(duì)數(shù)組不作越界語(yǔ)言對(duì)數(shù)組不作越界檢查,使用時(shí)要注意檢查,使用時(shí)要注意只能逐個(gè)對(duì)數(shù)組元素進(jìn)行操作(只能逐個(gè)對(duì)數(shù)組元素進(jìn)行操作(字符數(shù)組例外字符數(shù)組例外)int a10, i;scanf( %d ,&ai);for( i=0;i10;i+ ) scanf( %d ,&ai);printf( %d ,ai);for( i=0;i10;i+ ) printf( %d ,ai);一維數(shù)組的輸入和輸出一維數(shù)組的輸入和輸出例例5-3 求數(shù)組求數(shù)組nAarr10中各元素的和。中各元素的和。 #include /* 求數(shù)組中各元素的和 */ vo

7、id main() int i,nArr10,nSum; nSum=0; printf(請(qǐng)輸入請(qǐng)輸入10個(gè)整數(shù)個(gè)整數(shù):n); for(i=0;i10;i+) scanf(%d,&nArri); for(i=0;i10;i+) nSum+=nArri; printf(nSum is %dn,nSum); 程序?qū)崿F(xiàn)程序?qū)崿F(xiàn)5.2. 4 一維數(shù)組程序舉例一維數(shù)組程序舉例 例5-4編寫程序,每名學(xué)生有四門課考試成績(jī),用一維數(shù)組實(shí)現(xiàn)計(jì)算每個(gè)學(xué)生的平均成績(jī)。 問(wèn)題分析問(wèn)題分析由于該例題只要求計(jì)算平均成績(jī),因此可以由于該例題只要求計(jì)算平均成績(jī),因此可以用用4個(gè)整個(gè)整型數(shù)組存放數(shù)學(xué)、物理、英語(yǔ)和計(jì)算機(jī)

8、的成績(jī)型數(shù)組存放數(shù)學(xué)、物理、英語(yǔ)和計(jì)算機(jī)的成績(jī),用一用一個(gè)實(shí)型數(shù)組存放每個(gè)學(xué)生的平均成績(jī)個(gè)實(shí)型數(shù)組存放每個(gè)學(xué)生的平均成績(jī)。程序可按如下。程序可按如下步驟實(shí)現(xiàn):步驟實(shí)現(xiàn):1)輸入數(shù)據(jù),把數(shù)學(xué)、物理、英語(yǔ)、計(jì)算機(jī)成績(jī)分)輸入數(shù)據(jù),把數(shù)學(xué)、物理、英語(yǔ)、計(jì)算機(jī)成績(jī)分別存放在數(shù)組別存放在數(shù)組nMath, nPhysics, nEnglish, nComputer中。中。2)計(jì)算平均成績(jī))計(jì)算平均成績(jī), 將結(jié)果放在將結(jié)果放在dAverage數(shù)組中。數(shù)組中。3)輸出結(jié)果。)輸出結(jié)果。 解決方案解決方案例5-4編寫程序,每名學(xué)生有四門課考試成績(jī),用一維數(shù)組實(shí)現(xiàn)計(jì)算每個(gè)學(xué)生的平均成績(jī)。 程序?qū)崿F(xiàn)程序?qū)崿F(xiàn)5.3

9、相同類型數(shù)據(jù)的二維及多維存儲(chǔ)相同類型數(shù)據(jù)的二維及多維存儲(chǔ) 5.3.1 二維數(shù)組的定義二維數(shù)組的定義 二維數(shù)組定義的一般形式是:二維數(shù)組定義的一般形式是: 類型說(shuō)明符類型說(shuō)明符 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式1常量表達(dá)式常量表達(dá)式2;二維數(shù)組在內(nèi)存中的存儲(chǔ):二維數(shù)組在內(nèi)存中的存儲(chǔ):int a32a01a10a11a20a21 014523a00a00 a01a10 a11a20 a21a0a1a2行數(shù)列數(shù)元素個(gè)數(shù)=行數(shù)*列數(shù)例:例:int a34;20089201011201213201415200012002320045200067a00 a01a02 a03a10 a11a12a13a20

10、 a21 a22 a23每個(gè)元素每個(gè)元素aiai由包含由包含4 4個(gè)元素個(gè)元素的的一維數(shù)組一維數(shù)組組成組成二維數(shù)組二維數(shù)組a a是由是由3 3個(gè)元素組成個(gè)元素組成a0a1a2行名行名014523a01a02a03a10a11a00a13a20a21a22a23a126789a0a1a2二維數(shù)組理解二維數(shù)組理解5.3.2 二維數(shù)組的初始化l分行初始化: 例 int a23=1,2,3,4,5,6;a00a01a02a10a11a12123456全部初始化l按元素排列順序初始化 例 int a23=1,2,4;a00a01a02a10a11a12120400部分初始化 例 int a3=1,4,5

11、;a00 a01 a02 a10 a11 a12100450第一維第一維長(zhǎng)度省略初始化長(zhǎng)度省略初始化 例 int a23=1,2,3,4,5,6;a00a01a02a10a11a12123456全部初始化 例 int a23=1,2,4;a00a01a02a10a11a12124000部分初始化 例 int a3=1,2,3,4,5;a00a01a02a10a11a12123450第一維第一維長(zhǎng)度省略初始化長(zhǎng)度省略初始化 二維數(shù)組的輸入和輸出數(shù)組的輸入和輸出只能逐個(gè)對(duì)數(shù)組元素進(jìn)行操作數(shù)組的輸入和輸出只能逐個(gè)對(duì)數(shù)組元素進(jìn)行操作(字符數(shù)組例外字符數(shù)組例外)int b23,i,j;輸入第輸入第i i

12、行第行第j j列元素:列元素:scanf(“%d”,&aij);輸入整個(gè)數(shù)組元素:輸入整個(gè)數(shù)組元素:for (i=0;i2;i+) for(j=0;j3;j+) scanf(“%d”,&aij);輸出第輸出第i i行第行第j j列列元素:元素:printf(“%d”,aij);輸出整個(gè)數(shù)組元素輸出整個(gè)數(shù)組元素:for (i=0;i2;i+) for(j=0;j3;j+) printf(“%d”,aij);例5-5用二維數(shù)組實(shí)現(xiàn)如下表5-2所示的計(jì)算每門課的平均分?jǐn)?shù)。 問(wèn)題分析問(wèn)題分析可設(shè)一個(gè)二維數(shù)組可設(shè)一個(gè)二維數(shù)組nScore53存放五個(gè)人三門課的成存放五個(gè)人三門課的成績(jī)。再設(shè)

13、一個(gè)一維數(shù)組績(jī)。再設(shè)一個(gè)一維數(shù)組nAver 3存放所求得各科平均成存放所求得各科平均成績(jī),設(shè)變量績(jī),設(shè)變量nAverage 為全組各科總平均成績(jī)。為全組各科總平均成績(jī)。 程序?qū)崿F(xiàn)程序?qū)崿F(xiàn)/* 用二維數(shù)組解決求學(xué)生平均成績(jī)問(wèn)題*/#include #include void main() int i,j,nSum=0, nAverage,nAver3; int nScore53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85; for(i=0;i3;i+) for(j=0;j5;j+) nSum=nSum+nScoreji;nAveri=nSum/5;n

14、Sum=0; nAverage=(nAver0+nAver1+nAver2)/3; printf(math:%dnc languag:%dndFoxpro:%dn,nAver0,nAver1,nAver2); printf(total:%dn, nAverage);#include #include void main() int i,j,nSum=0, nAverage,nAver3; int nScore35=80,61,59,85,76,75,65,63,87,77,92,71,70,90,85; for(i=0;i3;i+) for(j=0;j5;j+)nSum=nSum+nScore

15、ij;nAveri=nSum/5;nSum=0; nAverage=(nAver0+nAver1+nAver2)/3;printf(math:%dnclanguag:%dndFoxpro:%dn,nAver0,nAver1,nAver2); printf(total:%dn, nAverage); 5.3.3二維數(shù)組元素的引用二維數(shù)組引用的一般形式是:二維數(shù)組引用的一般形式是: 數(shù)組名數(shù)組名下標(biāo)下標(biāo)下標(biāo)下標(biāo);例5-6一個(gè)電腦公司銷售兩種規(guī)格的磁盤:3英寸和5英寸,每一片磁盤可以有以下4種容量:?jiǎn)蚊骐p密;雙面雙密;單面高密;雙面高密。用一個(gè)二維表格可以很好的表述磁盤的價(jià)格。要求將表格存入一個(gè)二維

16、數(shù)組,并按表格的行列格式實(shí)現(xiàn)表格的分行打印。 問(wèn)題分析問(wèn)題分析可以使用多個(gè)賦值語(yǔ)句,完成把這些價(jià)格存入一個(gè)表格的任可以使用多個(gè)賦值語(yǔ)句,完成把這些價(jià)格存入一個(gè)表格的任務(wù)。用嵌套務(wù)。用嵌套for循環(huán)打印輸出結(jié)果。輸出時(shí)用轉(zhuǎn)移字符循環(huán)打印輸出結(jié)果。輸出時(shí)用轉(zhuǎn)移字符t控控制對(duì)齊,行號(hào)變化時(shí)必須插入一個(gè)制對(duì)齊,行號(hào)變化時(shí)必須插入一個(gè)n以輸出回車換行。為以輸出回車換行。為了在輸出中增添描述性標(biāo)題,只需簡(jiǎn)單地在首行數(shù)值打印之了在輸出中增添描述性標(biāo)題,只需簡(jiǎn)單地在首行數(shù)值打印之前打印一行標(biāo)題,在首列數(shù)值打印前打印一列標(biāo)題即可。前打印一行標(biāo)題,在首列數(shù)值打印前打印一列標(biāo)題即可。 程序?qū)崿F(xiàn)程序?qū)崿F(xiàn) 5.3.4

17、多維數(shù)組的初始化和引用(1)多維數(shù)組的定義及初始化多維數(shù)組的定義及初始化類型說(shuō)明符類型說(shuō)明符 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式1 常量表達(dá)式常量表達(dá)式 2常量表達(dá)式常量表達(dá)式n;(2)多維數(shù)組的引用多維數(shù)組的引用數(shù)組名數(shù)組名e1e2e3; 5.3.5 數(shù)組程序舉例 例5-7有一個(gè)34的矩陣,編寫程序找出值為最大的元素及其所在的行號(hào)和列號(hào)。 問(wèn)題分析問(wèn)題分析對(duì)于矩陣,用二維數(shù)對(duì)于矩陣,用二維數(shù)組來(lái)描述會(huì)很方便。求組來(lái)描述會(huì)很方便。求矩陣中值最大的元素,矩陣中值最大的元素,可以這樣實(shí)現(xiàn):定義一可以這樣實(shí)現(xiàn):定義一個(gè)變量個(gè)變量nMax并初始化為并初始化為nArr00,用雙重循環(huán),用雙重循環(huán)訪問(wèn)矩陣中

18、所有的元素訪問(wèn)矩陣中所有的元素,將每個(gè)元素和,將每個(gè)元素和nMax相相比較,用大于比較,用大于nMax值的值的元素替換元素替換nMax中原有的中原有的值,同時(shí)記錄下來(lái)該元值,同時(shí)記錄下來(lái)該元素的行列下標(biāo)。循環(huán)結(jié)素的行列下標(biāo)。循環(huán)結(jié)束后,輸出束后,輸出nMax和所記和所記錄的下標(biāo)值。該問(wèn)題解錄的下標(biāo)值。該問(wèn)題解決方法可以用下面的流決方法可以用下面的流程圖程圖5-14來(lái)表示來(lái)表示。解決方案解決方案 程序?qū)崿F(xiàn)程序?qū)崿F(xiàn)5.4 字符類型數(shù)據(jù)集合的存儲(chǔ)字符類型數(shù)據(jù)集合的存儲(chǔ) 字符串字符串 用雙引號(hào)括起的一串字符是字符串常量,用雙引號(hào)括起的一串字符是字符串常量,C語(yǔ)言語(yǔ)言自動(dòng)為其添加自動(dòng)為其添加0終結(jié)符終結(jié)

19、符 C語(yǔ)言并沒(méi)有為字符串提供任何專門的表示法,語(yǔ)言并沒(méi)有為字符串提供任何專門的表示法,完全使用完全使用字符數(shù)組字符數(shù)組和和字符指針字符指針來(lái)處理來(lái)處理 字符數(shù)組字符數(shù)組 字符數(shù)組中的每一個(gè)數(shù)組元素都存放一個(gè)字符。字符數(shù)組中的每一個(gè)數(shù)組元素都存放一個(gè)字符。 char string80;5.4.15.4.1字符數(shù)組的定義字符數(shù)組的定義例例: char c10, ch345.4.2 5.4.2 字符數(shù)組的初始化字符數(shù)組的初始化u逐個(gè)字符賦值逐個(gè)字符賦值u用字符串常量用字符串常量 例 char ch6=H,e,l,l,o;ch0Hello逐個(gè)字符賦值ch1ch2ch3ch4 例 char ch5=B,

20、o,y;ch0Boy00逐個(gè)字符賦值ch1ch2ch3ch4 例 char ch5=“Boy”;ch0Boy00用字符串常量ch1ch2ch3ch4 例: char ch6=“Hello”; char ch6=“Hello”; char ch=“Hello”;用字符串常量ch0Helloch1ch2ch3ch40ch5 例 char diamond5=., .,*,.,*,.,*, *, ., ., . ,*,.,*, .,*,., .,*;二維字符數(shù)組初始化.*00.*.*0*.*.*.*0.*00diamond0diamond1diamond2diamond3diamond4 例 char

21、 fruit7=“Apple”,”O(jiān)range”, ”Grape”,”Pear”,”Peach”;二維字符數(shù)組初始化fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach00例:l逐個(gè)字符I/O: %cl整個(gè)字符串I/O: %s例:用%c main() char str5; int i; for(i=0;i5;i+) scanf(“%c”, &stri); for(i=0;i5;i+) printf(“%c”, stri);例:用%s main() char str5; scanf(“%s”, str); prin

22、tf(“%s”, str);J 用字符數(shù)組名用字符數(shù)組名, ,不要加不要加& &J 輸入串長(zhǎng)度輸入串長(zhǎng)度 數(shù)組維數(shù)數(shù)組維數(shù)J 遇空格或回車結(jié)束遇空格或回車結(jié)束J 自動(dòng)加自動(dòng)加00用字符數(shù)組名用字符數(shù)組名, ,遇遇00結(jié)束結(jié)束字符串的輸入輸出字符串的輸入輸出main() int i; char a5; scanf(%s,a); for(i=0;i5;i+) printf(%d,ai);運(yùn)行情況:(1)若輸入 hel , 正常(2)若輸入 hell , 正常(3)若輸入 hello , 用%s 輸出時(shí),會(huì)出現(xiàn)問(wèn)題 h e l 0 h e l l 0 h e l l o輸入字符串長(zhǎng)度

23、 數(shù)組維數(shù)例:#include main() char a15,b5,c5; scanf(%s%s%s,a,b,c); printf(a=%snb=%snc=%sn,a,b,c); scanf(%s,a); printf(a=%sn,a);運(yùn)行情況:運(yùn)行情況:輸入:輸入:How are you?輸出:輸出:a=How b=are c=you?輸入:輸入:How are you?輸出:輸出:a=Howscanf中%s%s輸入時(shí),遇空格或回車結(jié)束例:字符串輸入舉例例:字符串輸入舉例例例 #include main( ) char string80; printf(“Input a string:”

24、); gets(string); puts(string); 輸入輸入: How are you?輸出輸出: How are you ? 5.5 字符串處理函數(shù)字符串處理函數(shù) C語(yǔ)言提供了豐富的字符串處理函數(shù),大致可分為字符串的輸入、輸出、合并、修改、比較、轉(zhuǎn)換、復(fù)制、搜索幾類。使用這些函數(shù)可大大減輕編程的負(fù)擔(dān)。 用于輸入輸出的字符串函數(shù),在使用前應(yīng)包含頭文件stdio.h,使用其它字符串函數(shù)應(yīng)包含頭文件string.h。 包含在頭文件 string.hu字符串輸出函數(shù)puts格式:puts(字符數(shù)組名)功能:向顯示器輸出字符串(輸出完,換行)說(shuō)明:字符數(shù)組必須以0結(jié)束u字符串輸入函數(shù)gets

25、格式:gets(字符數(shù)組名)功能:從鍵盤輸入一以回車結(jié)束的字符串放入字符數(shù)組中, 并自動(dòng)加0說(shuō)明:輸入串長(zhǎng)度應(yīng)小于字符數(shù)組維數(shù)例例 #include main( ) char string80; printf(“Input a string:”); gets(string); puts(string); 輸入輸入: How are you?輸出輸出: How are you ? 常用的字符串處理函數(shù)常用的字符串處理函數(shù)u字符串連接函數(shù)strcat格式:strcat(字符數(shù)組名1,字符數(shù)組名2)功能:把字符數(shù)組2連到字符數(shù)組1后面返回值:返回字符數(shù)組1的首地址說(shuō)明:字符數(shù)組1必須足夠大 連接前,

26、兩串均以0結(jié)束;連接后,串1的0 取消, 新串最后加0u字符串拷貝函數(shù)strcpy格式:strcpy(字符數(shù)組名1,字符串名2)功能:將字符串2,拷貝到字符數(shù)組1中去返回值:返回字符數(shù)組1的首地址說(shuō)明:字符數(shù)組1必須足夠大 拷貝時(shí)0一同拷貝 不能使用賦值語(yǔ)句為一個(gè)字符數(shù)組賦值例:例: char str120 =“Hello!”; char str220; str2=str1; ()常用的字符串處理函數(shù)(常用的字符串處理函數(shù)(2)u字符串比較函數(shù)strcmp格式:strcmp(字符串名1,字符串名2)功能:比較兩個(gè)字符串比較規(guī)則:對(duì)兩串從左向右逐個(gè)字符比較(ASCII碼), 直到遇到不同字符或0

27、為止返回值:返回int型整數(shù),a. 若字符串1 字符串2, 返回正整數(shù) c. 若字符串1= 字符串2,返回零說(shuō)明:字符串比較不能用“=”,必須用strcmpu字符串長(zhǎng)度函數(shù)strlen格式:strlen(字符數(shù)組名)功能:計(jì)算字符串長(zhǎng)度返回值:返回字符串實(shí)際長(zhǎng)度,不包括0在內(nèi) 本程序中把輸入的字符串和數(shù)組本程序中把輸入的字符串和數(shù)組st2st2中的串比中的串比較,比較結(jié)果返回到較,比較結(jié)果返回到k k中,根據(jù)中,根據(jù)k k值再輸出結(jié)果提值再輸出結(jié)果提示串。當(dāng)輸入為示串。當(dāng)輸入為dbasedbase時(shí),由時(shí),由ASCIIASCII碼可知碼可知“dBASEdBASE”大于大于“C Language

28、C Language”故故k0,k0,輸出結(jié)果輸出結(jié)果“st1st2st1st2”。 程序?qū)崿F(xiàn)程序?qū)崿F(xiàn)#include #include main() char str1 = Hello!, str2 = How are you? ,str20; int len1,len2,len3; len1=strlen(str1); len2=strlen(str2); if(strcmp(str1, str2)0) strcpy(str,str1); strcat(str,str2); else if (strcmp(str1, str2)0) strcpy(str,str2); strcat(str

29、,str1); else strcpy(str,str1); len3=strlen(str); puts(str); printf(”Len1=%d,Len2=%d,Len3=%dn”,len1,len2,len3);How are you?Hello!Len1=6,Len2=12,Len3=18例:例:strcmpstrcmp與與strlenstrlen舉例舉例#include main() char p20=a,b,c,d,q =abc,r =abcde; strcpy(p+strlen(q),r); strcat(p,q); printf(%d %d,sizeof(p),strlen(

30、p);20 11例例:5.6 字符串指針變量與字符數(shù)組字符串指針變量與字符數(shù)組 J字符串指針變量本身是一個(gè)字符串指針變量本身是一個(gè)變量變量,用于存放,用于存放字符串的首地址。字符串的首地址。J字符數(shù)組是由于若干個(gè)數(shù)組元素組成的,它字符數(shù)組是由于若干個(gè)數(shù)組元素組成的,它可用來(lái)存放整個(gè)字符串。可用來(lái)存放整個(gè)字符串。 字符數(shù)組字符數(shù)組 每個(gè)元素都是字符類型的數(shù)組每個(gè)元素都是字符類型的數(shù)組 charchar string100; string100; 字符串指針變量字符串指針變量 指向字符類型的指針指向字符類型的指針 char char * *p;p; 數(shù)組和指針可以等同看待數(shù)組和指針可以等同看待定義

31、方法不同定義方法不同字符串指針變量與字符數(shù)組的區(qū)別 初始化含義不同初始化含義不同 char *pstr = ” china ”; 等價(jià)于等價(jià)于 char *pstr; pstr = ” china ”; char str14 = ” china ”; 不等價(jià)于不等價(jià)于 char str14; str = ” china ”; 字符串指針是變量,而數(shù)組名是地址常量字符串指針是變量,而數(shù)組名是地址常量字符串指針變量與字符數(shù)組的區(qū)別 在定義一個(gè)數(shù)組時(shí),在編譯時(shí)即分配單元,有確定在定義一個(gè)數(shù)組時(shí),在編譯時(shí)即分配單元,有確定地址地址,而定義一個(gè)字符指針變量時(shí),如未對(duì)它賦初,而定義一個(gè)字符指針變量時(shí),如未

32、對(duì)它賦初值,則其所指數(shù)據(jù)是不定的,值,則其所指數(shù)據(jù)是不定的,因而使用是危險(xiǎn)的。因而使用是危險(xiǎn)的。 例如,輸入字符串時(shí)例如,輸入字符串時(shí) char str10; scanf(%s, str); /*正確正確*/ char *a; scanf(%s, a); /*錯(cuò)誤錯(cuò)誤*/ 應(yīng)為:應(yīng)為: char *a; char str10; a = str; scanf(%s, a); /*正確正確*/字符串指針變量與字符數(shù)組的區(qū)別例:字符串拷貝 方法方法1:用用字符數(shù)組字符數(shù)組編程實(shí)現(xiàn)編程實(shí)現(xiàn) /*函數(shù)功能:函數(shù)功能: 字符串拷貝字符串拷貝 函數(shù)參數(shù):函數(shù)參數(shù): 字符型數(shù)組字符型數(shù)組srcStr,存儲(chǔ)源字

33、符串,存儲(chǔ)源字符串 字符型數(shù)組字符型數(shù)組dstStr,存儲(chǔ)目的字符串,存儲(chǔ)目的字符串 函數(shù)返回值:無(wú)函數(shù)返回值:無(wú)*/void MyStrcpy(char dstStr, char srcStr)int i = 0; while (srcStri != 0) dstStri = srcStri; i+; dstStri = 0;例:字符串拷貝下標(biāo) 0 1 2 3 4 5 6 7 8 9 10 11 H elloC hina0HelloC hina0H elfromit o i下標(biāo)移動(dòng)方向下標(biāo)移動(dòng)方向toi=0fromto結(jié)束拷貝i +H elloC hina0H elloC hina0*fro

34、m*to指針移動(dòng)方向指針移動(dòng)方向指針移動(dòng)指針移動(dòng)方向方向*to=0tofrom+fromfromto+to例:字符串拷貝 方法方法2:用用字符指針字符指針編程實(shí)現(xiàn)編程實(shí)現(xiàn) /*函數(shù)功能:字符串拷貝函數(shù)功能:字符串拷貝 函數(shù)參數(shù):函數(shù)參數(shù): 字符型指針字符型指針srcStr,指向源字符串,指向源字符串 字符型指針字符型指針dstStr,指向目的字符串,指向目的字符串 函數(shù)返回值:無(wú)函數(shù)返回值:無(wú)*/void MyStrcpy(char *dstStr, const char *srcStr)while (*srcStr != 0) *dstStr = *srcStr; srcStr+; dstS

35、tr+; *dstStr = 0; 5.7 綜合應(yīng)用實(shí)例綜合應(yīng)用實(shí)例問(wèn)題描述:學(xué)生成績(jī)檔案管理要對(duì)學(xué)生的各門課程成績(jī)、姓名、學(xué)號(hào)等信息進(jìn)行增、刪、改、查的相應(yīng)操作。要求用數(shù)組來(lái)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)。 這兩個(gè)實(shí)例的講解要根據(jù)教師講課的需要及課時(shí)安排,自行從書(shū)中選取 main()int s25=150001,150002,150003,150004,150005,1000,500,230,998,x,i;char z=y;printf(nn*n);while(z=y|z=Y) printf(n 請(qǐng)輸入零件請(qǐng)輸入零件:); scanf(%d,&x); if(x=150001 & x=150005) for(i=0;i5;i+) if(s0i=x) printf( %d,%dn,s0i,s1i); else printf( no ling jian); printf(nn 是否想繼續(xù)查找?如果是請(qǐng)輸入(是否想繼續(xù)查找?如果是請(qǐng)輸入(Y),否則輸入否則輸入(N)nnr); z=getchar(); z=getchar();printf(n*n);1#include main()int s25=150001,150002,150003,150004,150005,100

溫馨提示

  • 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)論