C++ C字符串總結(jié)_第1頁(yè)
C++ C字符串總結(jié)_第2頁(yè)
C++ C字符串總結(jié)_第3頁(yè)
C++ C字符串總結(jié)_第4頁(yè)
C++ C字符串總結(jié)_第5頁(yè)
已閱讀5頁(yè),還剩5頁(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、字符數(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論