




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、字符數(shù)組和字符串 &字符數(shù)組和字符串的概念 &字符數(shù)組的初始化 &字符串的輸入輸出 &綜合舉例 字符數(shù)組和字符串的概念 字符數(shù)組是元素類型為字符的數(shù)組 ,它既具有普通數(shù)組的一般性質(zhì) ,又具有某些特殊性質(zhì)。 字符串常量是用雙引號(hào)包圍的字符序列。存儲(chǔ)字符串常量時(shí),系統(tǒng)會(huì)在字符序列后自動(dòng)加上 '0',標(biāo)志字符串的結(jié)束。字符串的長(zhǎng)度定義為字符串中的有效字符數(shù),不包括結(jié)束標(biāo)
2、志 '0'和雙引號(hào)。 字符串變量是以 '0'作為結(jié)束標(biāo)志的字符數(shù)組。字符串變量用于存儲(chǔ)和處理字符串常量。在書(shū)中統(tǒng)稱為字符串的,既可能是字符串常量也可能是存儲(chǔ)了字符串常量的字符串變量,即特殊的字符數(shù)組。 字符數(shù)組有兩種用法 :一是當(dāng)作字符的數(shù)組來(lái)使用。這時(shí)的用法與整數(shù)的數(shù)組、 實(shí)數(shù)的數(shù)組等相同,對(duì)字符數(shù)組的輸入、輸出、賦值、引用等都是針對(duì)單個(gè)的元素進(jìn)行。二是更為重要的用法即存儲(chǔ)、處理字符串。這時(shí)它除了可以像普通數(shù)組一樣使用外,還可以把字符串作為一個(gè)整體進(jìn)
3、行操作。 字符數(shù)組的初始化 (1用字符對(duì)字符數(shù)組初始化 這時(shí)把字符數(shù)組當(dāng)作普通數(shù)組看待 , 產(chǎn)生的數(shù)組不會(huì)有結(jié)束符 '0'。當(dāng)數(shù)據(jù)量很大時(shí),使用這種方法的工作量是繁重的。 例: char rat5='H','E','L','L','O' (2用字符串常量對(duì)字符數(shù)組初始化 ,這時(shí)把字符數(shù)組當(dāng)作字符串變量看待。 例: char panic6="HELLO&qu
4、ot; 這時(shí)存放在數(shù)組 panic中的字符除了 H,E,L,L,O之外還有結(jié)束標(biāo)志 '0',因此與下面的初始化等價(jià): char panic6='H','E','L','L','O' 注意 : 第二個(gè)說(shuō)明語(yǔ)句中有 6 個(gè)字符 , 因此字符數(shù)組 panic 的長(zhǎng)度是 6, 而字符串 "HELLO"的長(zhǎng)度卻是 5,
5、不把 '0'計(jì)算在內(nèi)。 C語(yǔ)言也允許在用字符串初始化時(shí)省略花括號(hào)。 char panic="HELLO" 如果在說(shuō)明語(yǔ)句中指定了數(shù)組的長(zhǎng)度,那么其大小不得小于初始化字符串的長(zhǎng)度。多余的元素位置被系統(tǒng)自動(dòng)初始化為 0。實(shí)際上 '0'就是 ASCII碼為 0的字符 ,因此 '0'和整數(shù) 0是一回事。 例: char posia11="string" 下面的初始化
6、卻是錯(cuò)誤的 : char neg5="double arrow" /*初始化數(shù)據(jù)太多 */ 3字符數(shù)組兩種不同用法舉例 在前面已經(jīng)說(shuō)明 ,字符數(shù)組既可當(dāng)作普通數(shù)組使用也可用于存儲(chǔ)和處理字符串 .下面是對(duì)應(yīng)兩種用法的例子。 例 : 字符數(shù)組用法示例之一 ,當(dāng)作普通數(shù)組。 #include #define SIZE 10 main( char ary1SIZE='P','L','O','T' char ary2SIZE; cha
7、r ch; int i,j; for(i=0;i<4;i+ /*輸出數(shù)組 ary1*/ printf("%c",ary1i; printf("n請(qǐng)輸入一行字符 n" for(i=0;i 輸入數(shù)組 ary2*/ scanf("%c",&ch; if(ch='n' break; ary2i=ch; printf("n" for(j=0;j 輸出數(shù)組 ary2*/ printf("%c",ary2j; 程序中為了處理數(shù)組使用了循環(huán) ,并且使用了 ch,i,j等工作變量 ,
8、增加了程序的負(fù)擔(dān) ,而且又缺乏靈活性 ,故這種方法很少使用。與下面完成同樣功能的程序相比,本程序復(fù)雜多了。 例 : 字符數(shù)組用法之二 ,當(dāng)作字符串。 #include #define SIZE 10 main( char ary1SIZE="PLOT" char ary2SIZE; printf("%sn",ary1; /*輸出數(shù)組 ary1*/ printf("請(qǐng)輸入一行字符 :n" scanf("%s",ary2; /*輸入數(shù)組 ary2*/ printf("輸入字符串是 :n"
9、 printf("%s",ary2; /*輸出數(shù)組 ary2*/ 程序沒(méi)有用循環(huán) ,只是直接調(diào)用 scanf和 printf函數(shù)完成輸入輸出。程序之所以能夠自動(dòng)識(shí)別出字符串有幾個(gè)字符,是因此規(guī)定了字符串必須以 '0'作為結(jié)束 , 像 printf之類的函數(shù)輸出字符串時(shí)一邊檢測(cè)一邊輸出 ,一旦碰到 '0',便認(rèn)為字符串已經(jīng)結(jié)束 ,之后就停止工作。這樣一來(lái) '0'對(duì)整個(gè)字符串來(lái)說(shuō)至關(guān)重要了。一旦由于某種原因字符串的 '0'被改為別的值 ,字符
10、串就無(wú)法終止 ,printf函數(shù)就不能正常工作了。 請(qǐng)注意 printf和 scanf函數(shù)處理字符串?dāng)?shù)組的特點(diǎn)。直接使用數(shù)組名作為參數(shù)。 例: printf("%sn",ary1; 這種直接使用數(shù)組名的用法表示把字符串?dāng)?shù)組當(dāng)作一個(gè)統(tǒng)一整體來(lái)處理,只適用于字符串,對(duì)別的類型的數(shù)組是不能這樣用的。 字符串的輸入輸出 字符串的輸入 字符串輸出
11、; 字符串處理函數(shù) scanf 函數(shù) 用帶 %s格式符的 scnaf函數(shù)可以進(jìn)行字符串的輸入。在使用中要注意兩個(gè)問(wèn)題:一是 scanf函數(shù)讀入的字符串開(kāi)始于第一個(gè)非空白符,包括下一個(gè)空白符 (' n','t',''之前的所有字符,最后自動(dòng)加上 0'。 例: char str10; sc
12、anf("%s",str; 輸入: hello world 實(shí)際存入 str的只有 "hello",前面的空格被忽略掉,而 "world"被留在輸入緩沖區(qū)中等待下一次輸入函數(shù)的讀入。 二是要保證字符數(shù)組的長(zhǎng)度足夠大 ,能容納下可能的最大輸入串。 例: char t5,s10; scanf("%s",t; &
13、#160; 輸入 :dingdong 則字符串 "dingdong"不僅存入了 t的空間 ,還侵占了 s的空間。 gets 函數(shù) gets函數(shù)專門(mén)用于輸入字符串 ,一般形式是 : gets(字符數(shù)組名 ; 其中 , 函數(shù)參數(shù) " 字符數(shù)組名 " 規(guī)定了只能使用數(shù)組名而不能是字符串常量。與 scanf函數(shù)不同 ,gets函數(shù)將用戶鍵入的換
14、行符之前的所有字符 (包括 't'和 ''存入字符數(shù)組 ,然后加上 '0',但換行符被丟掉。與 scanf函數(shù)相同的是 gets 函數(shù)也不檢查用戶輸入字符串長(zhǎng)度是否超過(guò)了字符數(shù)組的容納能力,因此編程者要確保數(shù)組足夠大。 例: char str11; gets(str; 輸入 :I am a boy 字符串輸出 printf 函數(shù)
15、; 用帶 %s格式字符的 printf函數(shù)能進(jìn)行字符串的輸出。存放在字符數(shù)組中的字符串被全部輸出,直至遇到 '0'為止。 例: char msg="T0 be or not to be" printf("%s",mag; puts 函數(shù) puts函數(shù)專門(mén)用于字符串輸出。一般形式是: &
16、#160; puts(字符串 ; 其中 , 參數(shù) " 字符串 " 可以是字符串常量 , 也可以是字符串變量。 puts函數(shù)打印字符串的全部?jī)?nèi)容 ,直至遇到 '0'為止 ,然后自動(dòng)多打印一個(gè) 'n',起到換行的作用。而 printf函數(shù)無(wú)此功能。 到底應(yīng)該使用 scanf和 printf還是使用 gets和 puts,沒(méi)有一個(gè)絕對(duì)的標(biāo)準(zhǔn)。一般而言,當(dāng)多種類型的混合輸入輸出時(shí),選用 scanf和 pr
17、intf; 當(dāng)大量文字信息輸入輸出時(shí),使用 gets和 puts,這兩個(gè)函數(shù)要稍稍快一些。 字符串處理函數(shù) 介紹最有用又最常見(jiàn)的四個(gè)字符串處理函數(shù): strlen、 strcat、 strcmp、 strcpy。這些函數(shù)的原型存放在 string.h文件中,在程序中使用它們時(shí)別忘了用 #include命令包含 string.h文件。 strlen 函數(shù) strlen函數(shù)測(cè)試字符串的實(shí)際長(zhǎng)度(不包括 '0'),并將該長(zhǎng)度作為函數(shù)的值返
18、回。函數(shù)參數(shù)“字符串”可以是字符串常量,也可以是字符變量一般形式是: length=strlen(字符中) 例: "ABC" 長(zhǎng)度為 3。 "abcn" 長(zhǎng)度為 4,而非 5,'n'被看成一個(gè)字符。 "" 長(zhǎng)度為 0,空字符串沒(méi)有有效字符 ,所以長(zhǎng)度為 0。 str
19、cat 函數(shù) strcat函數(shù)用于連結(jié)兩個(gè)字符串。一般形式是: strcat(字符串 1,字符串 2; strcat函數(shù)把字符串 2連結(jié)在字符串 1的后面。其中,參數(shù)“字符串 1"必須是字符串變量 ,而 "字符串 2"則可以是字符串常量或變量。 調(diào)用 strcat函數(shù)后, str1中字符后的 '0'取消,只在新串最后保留一個(gè)'0'。 注
20、意 : strcat函數(shù)不檢查字符串 1的空白位置是否裝得下字符串 2。如果沒(méi)有足夠的空間,多余的字符將溢出至鄰近的內(nèi)存單元,破壞這些單元原來(lái)的內(nèi)容。所以連結(jié)前應(yīng)調(diào)用 strlen函數(shù)進(jìn)行檢驗(yàn),確保不發(fā)生溢出。記住在檢驗(yàn)時(shí)給長(zhǎng)度加,為新字符串的結(jié)束符 '0'留一個(gè)位置。 例 : strcat函數(shù)示例。 static char str130="Pelple's Republic of "/*注意空格*/ static char str2=&q
21、uot;China" printf("%s",strcat(str1,str2; 輸出: Pelple's Republic of China strcmp 函數(shù) strcmp函數(shù)是比較兩個(gè)字符串的大小 ,返回比較的結(jié)果。一般形式是: i=strcmp(字符串,字符串 ; 其中,字符串、
22、字符串均可為字符串常量或變量; i 是用于存放比較結(jié)果的整型變量。比較結(jié)果是這樣規(guī)定的: 字符串 1小于字符串 2,strcmp函數(shù)返回一個(gè)負(fù)值 ; 字符串 1等于字符串 2,strcmp函數(shù)返回零 ; 字符串 1大于字符串 2,strcmp函數(shù)返回一個(gè)正值 ;那么 ,字符中的大小是如何比較的呢 ?來(lái)看一個(gè)例子。 實(shí)際上 ,字符串的比較是比較字符串中各對(duì)字符的 ASCII碼。首先比較兩個(gè)串的第一個(gè)字符,若不相等,則停止比較并得出大于或小于的結(jié)果;如果相等就接著比較第二個(gè)字符然后第三個(gè)字符等等。如果兩上字符串前面的字符一直相等 ,像 "
23、disk"和 "disks" 那樣 , 前四個(gè)字符都一樣 , 然后比較第五個(gè)字符 , 前一個(gè)字符串 "disk"只剩下結(jié)束符 '0',后一個(gè)字符串 "disks"剩下 's','0'的 ASCII碼小于 's'的 ASCII碼 ,所以得出了結(jié)果。因此無(wú)論兩個(gè)字符串是什么樣, strcmp函數(shù)最多比較到其中一個(gè)字符串遇到結(jié)束符 '0'為止,就能得出結(jié)果。 注意:字符串是數(shù)組類型而非簡(jiǎn)單類型,不能用關(guān)系
24、運(yùn)算進(jìn)行大小比較。 if("ABC">"DEF" /*錯(cuò)誤的字符串比較 */ if(strcmp("ABC","DEF" /*正確的字符串比較 */ strcpy 函數(shù) strcpy函數(shù)用于實(shí)現(xiàn)兩個(gè)字符串的拷貝。一般形式是: strcpy(字符中 1,字符串 2
25、其中 ,字符串 1必須是字符串變量 ,而不能是字符串常量。 strcpy函數(shù)把字符串 2的內(nèi)容完全復(fù)制到字符串 1中 ,而不管字符串 1中原先存放的是什么。復(fù)制后,字符串 2保持不變。 例 : 注意 ,由于字符串是數(shù)組類型 ,所以兩個(gè)字符串復(fù)制不通過(guò)賦值運(yùn)算進(jìn)行。 t=s; /*錯(cuò)誤的字符串復(fù)制 */ strcpy(t,s; /*正確的字符串復(fù)制 */ 綜合舉例 例 : 輸入一行字符 ,統(tǒng)計(jì)其中有多少個(gè)單詞,單詞之間用空格
26、分隔開(kāi)。 分析:程序中設(shè)置變量i作為循環(huán)變量,num用來(lái)統(tǒng)計(jì)單詞個(gè)數(shù),word作為判別是否單詞的標(biāo)志,若word=0表示未出現(xiàn)單詞,如出現(xiàn)單詞word置1。 單詞的數(shù)目可以由空格出現(xiàn)的次數(shù)決定(連續(xù)的若干個(gè)空格作為出現(xiàn)一次空格;一行開(kāi)頭的空格不在內(nèi))。 #include "stdio.h" main( char string81; int i,num=0,word=0; char c; gets(string; for(i=0,(c=stringi!='0',i+ if(c='' word=0; else i
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖北工業(yè)職業(yè)技術(shù)學(xué)院《學(xué)術(shù)論文規(guī)范與訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 文化IP開(kāi)發(fā)師崗位面試問(wèn)題及答案
- 數(shù)據(jù)倉(cāng)庫(kù)開(kāi)發(fā)工程師崗位面試問(wèn)題及答案
- 江西省贛州市四校協(xié)作體2025年高二下化學(xué)期末監(jiān)測(cè)試題含解析
- 河南省輝縣一高2025屆高一化學(xué)第二學(xué)期期末復(fù)習(xí)檢測(cè)試題含解析
- 民工工資管理暫行辦法
- 國(guó)企資產(chǎn)轉(zhuǎn)讓管理辦法
- 北京教師處境管理辦法
- 就業(yè)創(chuàng)業(yè)指導(dǎo)的新策略
- 公園管理良策管理辦法
- 超聲波式熱量表超聲波熱量表
- 劍橋Think第一級(jí)Unit+1+Welcome課件
- 報(bào)告流動(dòng)式起重機(jī)械定期檢驗(yàn)自檢報(bào)告
- 黨組織關(guān)系介紹信(標(biāo)準(zhǔn)版)
- 腺垂體功能減退癥診療規(guī)范內(nèi)科學(xué)診療規(guī)范診療指南2023版
- 《安徽省工傷職工停工留薪期分類目錄》
- 北師大版八年級(jí)上冊(cè)物理(基礎(chǔ)版)(全冊(cè)知識(shí)點(diǎn)考點(diǎn)梳理、重點(diǎn)題型分類鞏固練習(xí))(家教、補(bǔ)習(xí)、復(fù)習(xí)用)
- GB 2762-2022食品安全國(guó)家標(biāo)準(zhǔn)食品中污染物限量
- GB/T 31776-2015車(chē)用甲醇汽油中甲醇含量檢測(cè)方法
- 工程力學(xué)基礎(chǔ)(講義)
- 心電圖報(bào)告的書(shū)寫(xiě)規(guī)范化培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論