C語言數(shù)組)_字符串_第1頁
C語言數(shù)組)_字符串_第2頁
C語言數(shù)組)_字符串_第3頁
C語言數(shù)組)_字符串_第4頁
C語言數(shù)組)_字符串_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、字符數(shù)組與字符串字符數(shù)組與字符串char a=W;char b=a;char c=n;char d=g;char e=L;char f=i;如何讓程序存儲我的姓名?Wang Lichar name15 = W, a, n, g, L, i; 用若干個字符用字符數(shù)組用字符串char name15= “Wang Li”;5.3.1 一維字符數(shù)組一維字符數(shù)組一維字符數(shù)組的定義、引用、初始化與其他類型一維字符數(shù)組的定義、引用、初始化與其他類型的一維數(shù)組一樣。的一維數(shù)組一樣。char str80; 定義一個含有定義一個含有80個字符型元素的數(shù)組個字符型元素的數(shù)組str char t5=H, a, p,

2、p, y;初始化數(shù)組初始化數(shù)組 t t0 t1 t4t H a p p y輸出數(shù)組輸出數(shù)組 t 的所有元素的所有元素for(i=0; i 對字符數(shù)組的操作對字符數(shù)組的操作普通字符數(shù)組:數(shù)組元素的個數(shù)是確定的,一般普通字符數(shù)組:數(shù)組元素的個數(shù)是確定的,一般用下標控制循環(huán)用下標控制循環(huán)字符串:沒有顯式地給出有效字符的個數(shù),只規(guī)字符串:沒有顯式地給出有效字符的個數(shù),只規(guī)定在字符串結(jié)束符定在字符串結(jié)束符 0 之前的字符都是字符串之前的字符都是字符串的有效字符,一般用結(jié)束符的有效字符,一般用結(jié)束符 0 來控制循環(huán)來控制循環(huán)循環(huán)條件:循環(huán)條件:si != 0 5.3.3 字符串的輸入輸出字符串的輸入輸出例

3、例11 從鍵盤讀入一個字符串,以回車符表示輸入結(jié)束。從鍵盤讀入一個字符串,以回車符表示輸入結(jié)束。輸出該字符串長度,然后輸出該字符串輸出該字符串長度,然后輸出該字符串方法方法1: 象普通數(shù)組一樣逐元素輸入輸出象普通數(shù)組一樣逐元素輸入輸出輸入:s0=getchar(); /讀入第一個字符i=0;while(si!=n) /當不是回車i+;si=getchar();si=0; /將將n轉(zhuǎn)換為轉(zhuǎn)換為 0或i = 0;while(si = getchar( ) != n) i+; si=0; /將將n轉(zhuǎn)換為轉(zhuǎn)換為 0for( i=0; s i!=0; i+) putchar(s i);字符串長度是i還是

4、i-1、i+1?字符串長度是有效字符個數(shù)s0si-1,共i個輸出字符串,不需要知道字符個數(shù),0是結(jié)束標志W(wǎng) a n g L in0方法方法2:用:用%s整體輸入輸出整體輸入輸出char name10;scanf(%s, name);printf(%s, name);格式描述串中使用轉(zhuǎn)換字符串“%s”Wang LiWang0使用 scanf 時,不能輸入空格Wang空格是%s輸入結(jié)束的標志方法方法3:用:用gets和和puts函數(shù)函數(shù)char name10;gets(name);puts(name);W angLi0Wang LiWang Li從鍵盤上讀入一個完整的行,存入字符數(shù)組name。并用

5、空字符0取代行尾的換行符n。把字符數(shù)組中的字符串輸出到顯示器。使用 gets函數(shù)允許輸入空格5.3.4字符串應(yīng)用舉例字符串應(yīng)用舉例例12. 輸入一行字符(字符個數(shù)不多于80),統(tǒng)計其中空格的個數(shù)思路分析:(1)定義字符數(shù)組 str81;(2)讀入字符串若字符串確定不含空格,可以用scanf(“%s”,str);若可能含有空格,用gets(str);(3)掃描整個字符串(不需要知道字符個數(shù))for(i=0;stri!=0;i+)#include int main() char str81; int i, count = 0; printf(n 請輸入一行字符:n ); gets(str); fo

6、r(i=0; stri != 0; i+) if( stri = ) count+; printf(“n 其中的空格總數(shù)為 %d n ,count);C is a programming language在循環(huán)執(zhí)行時,掃描整個數(shù)組以統(tǒng)計出空格 的數(shù)量,直到遇到字符 0。其中的空格總數(shù)為 4也可用while 循環(huán)i = 0;while(stri!=0) if(stri = ) count+; i+; 輸入一個以回車結(jié)束的字符串輸入一個以回車結(jié)束的字符串(少于少于80個字符個字符),統(tǒng),統(tǒng)計其中數(shù)字字符的個數(shù)。計其中數(shù)字字符的個數(shù)。模仿練習(xí):模仿練習(xí):#include int main() int

7、 count, i; char str80; printf(Enter a string: ); gets(str); count = 0; for(i = 0; stri != 0; i+) /若是數(shù)字若是數(shù)字 if(stri = 0) count+; printf(count = %dn, count); return 0; 模仿練習(xí)模仿練習(xí) 源程序源程序Enter a string: Its 512?count = 3 0 1 2 3 4 5 6 7 8sI t s 5 1 2 0 ? ?例例13 進制轉(zhuǎn)換進制轉(zhuǎn)換輸入一個以回車結(jié)束的字符串(少于輸入一個以回車結(jié)束的字符串(少于80個字符

8、),把字符串個字符),把字符串中的所有數(shù)字字符(中的所有數(shù)字字符(09)轉(zhuǎn)換為整數(shù),去掉其他字符。)轉(zhuǎn)換為整數(shù),去掉其他字符。例如,字符串例如,字符串”3a56bc”,轉(zhuǎn)換后的整數(shù)為轉(zhuǎn)換后的整數(shù)為356難點分析:如何將字符串轉(zhuǎn)化為整數(shù)值?例如字符串”356“轉(zhuǎn)換為整數(shù)356(1)遇到第一個整數(shù)3, d=3;(2) 遇到第二個整數(shù)5, d=d*10+5=35(3) 遇到第三個整數(shù)6, d=d*10+6=356.d=0;for(i=0; stri != 0; i+) if( stri =0 & str=9 ) d=d*10+(stri-0) stri中存的是字符, stri-0將其轉(zhuǎn)化為對

9、將其轉(zhuǎn)化為對應(yīng)的十進制數(shù)字應(yīng)的十進制數(shù)字#include int main() int d, i; char str80; printf(Enter a string: ); gets(str); d = 0; for(i = 0; stri != 0; i+) /若是數(shù)字若是數(shù)字 if(stri = 0) d = d*10 + (stri - 0) printf(“d = %dn, d); return 0; 例例14 統(tǒng)計單詞個數(shù)統(tǒng)計單詞個數(shù)方法方法1:統(tǒng)計空格數(shù)?:統(tǒng)計空格數(shù)? 問題:沒考慮多個空格相連的情況問題:沒考慮多個空格相連的情況方法方法2:如果一個空格緊跟一個非空格,一定是新單

10、如果一個空格緊跟一個非空格,一定是新單詞開始詞開始 this is my first test! 問:第一個單詞沒算上?問:第一個單詞沒算上? 答:答: count在加在加1就行?。烤托校?? 再問:若第一個單詞前有空格會怎樣?就又多了再問:若第一個單詞前有空格會怎樣?就又多了1 思路分析思路分析方法方法3:如果一個非空格后是一個空格,一定:如果一個非空格后是一個空格,一定是單詞的結(jié)束是單詞的結(jié)束 this is my first test! 問:最后一個單詞沒算上?問:最后一個單詞沒算上? 答:答: count在加在加1就行?。烤托校。?再問:若最后一個單詞后有空格會怎樣?再問:若最后一個單詞

11、后有空格會怎樣?就又多了就又多了1 思路分析思路分析方法方法4:設(shè)置一個標志變量:設(shè)置一個標志變量word開始開始word置置0For(i=0;stri!=0;i+) /掃描整個字符串掃描整個字符串 若若stri是空格是空格 word置置0 若若stri不是空格且不是空格且word=0 則新單詞出現(xiàn),則新單詞出現(xiàn),count+; word置置1; n#includenint main()nn char str1000;n int i, word, count;n word=0; count=0;n gets(str);n for(i=0; stri!=0; i+)n n if(stri= )

12、word=0;n if(stri!= & word=0) /新單詞出現(xiàn)新單詞出現(xiàn)n n count+; word=1;n nn printf(%dn,count);n 程序?qū)崿F(xiàn)程序?qū)崿F(xiàn)5.3.5 常用字符串函數(shù)常用字符串函數(shù)n以下介紹的字符串函數(shù)定義在頭文件以下介紹的字符串函數(shù)定義在頭文件中中(1)strlen: 求字符串長度求字符串長度(2)strcpy:字符串復(fù)制(賦值)字符串復(fù)制(賦值)(3)strcmp:字符串比較字符串比較(4)strcat:字符串合并字符串合并(1) 求字符串長度求字符串長度 strlen( )測試字符串長度。函數(shù)值就是測試字符串長度。函數(shù)值就是strstr

13、中字符的中字符的個數(shù)。個數(shù)。char str10= China;printf(%d,strlen(str);或或printf(%d,strlen(China);(2)字符串復(fù)制函數(shù)字符串復(fù)制函數(shù) strcpy( )思考:這樣賦值s1=Beijing ;或 s1=s2;可以嗎?為什么?s1的結(jié)果的結(jié)果char s110,s2 = Beijing;char s110,s2 = Beijing; strcpy(s1,s2); strcpy(s1,s2);或:或:strcpy(s1,Beijing);strcpy(s1,Beijing);字符串的賦值需要通過字符串的賦值需要通過strcpy實現(xiàn)實現(xiàn)ch

14、ar str110 =“China”;正確char str110 ;str1=“China”;錯誤改為:char str110 ;strcpy(str1,“China”);char str110 ,str2 =“China”;str1 = str2;改為:char str110 ,str2 =“China”;strcpy(str1,str2);為什么不允許這樣賦值?因為數(shù)組名是一個常量,代表數(shù)組的首地址,常量不可以被賦值,其值不可改變錯誤(3)字符串比較函數(shù))字符串比較函數(shù) strcmp( ):比較str1和str2的大小,若前者大則返回一個正整數(shù),若后者大則返回一個負整數(shù),若兩者相等,則返回

15、0。注意: 比較兩個字符串的大小只能使用此函數(shù),而不能使用“”、“”、“=”等關(guān)系運算符。字符串比較規(guī)則:按自左至右的順序,對應(yīng)字符比較,若當前對應(yīng)字符不同,則返回二者ASCII碼的差,若二者相同,則比較下一個字符,直到遇到不同字符為止,函數(shù)返回值為兩字符的差 str1 str2“cat” “fan”“abcde” “abd”“abcde” “abc”“abc” “abc”=strcmp(str1, str2)0strcmp(str1, str2)0strcmp(str1, str2)=0(4) 字符串連接函數(shù)字符串連接函數(shù) strcat( )把把str2str2中的字符串連接到中的字符串連接

16、到str1str1字符串的后面,結(jié)果字符串的后面,結(jié)果放在放在str1str1數(shù)組中數(shù)組中. .Str1 必須足夠大char str121=beijing and ;char str121=beijing and ;char str2 =shanghai;char str2 =shanghai;strcat(str1,str2);strcat(str1,str2);printf(%s,str1);printf(%s,str1);(5)字符串逆置函數(shù)字符串逆置函數(shù)strrev()將字符串將字符串str 前后顛倒前后顛倒char str10=“china”;strrev(str);puts(str

17、);輸出:anihc小練習(xí):小練習(xí):輸入三個字符串,輸出最大的字符串輸入三個字符串,輸出最大的字符串5.3.6 字符串數(shù)組字符串數(shù)組 一維字符數(shù)組可以存儲一個字符串,二維字符數(shù)組可以存一維字符數(shù)組可以存儲一個字符串,二維字符數(shù)組可以存儲多個字符串,稱為字符串數(shù)組。儲多個字符串,稱為字符串數(shù)組。 字符串數(shù)組的每一行元素中都含有字符串結(jié)束符字符串數(shù)組的每一行元素中都含有字符串結(jié)束符0,因,因此它的一行元素可以和字符串一樣輸入、輸出及初始化。此它的一行元素可以和字符串一樣輸入、輸出及初始化。如:如:char color 10=“red, blue, yellow, “green, purple;例1

18、5:輸入n,輸入n個字符串輸出最大字符串字符串數(shù)組可以用二維字符數(shù)組存儲。字符串數(shù)組可以用二維字符數(shù)組存儲。 假定字符串個數(shù)不多于假定字符串個數(shù)不多于100個,每個字符串長度不個,每個字符串長度不超過超過80例15:輸入n,輸入n個字符串輸出最大字符串(1)用第一個數(shù)str0做臨時最大值max(2)擂臺賽: for(i=1;in;i+) 如果stri比max大,則替換max(3)輸出max#include#include#define N 100#define LEN 81int main()char strNLEN, maxStrLEN;int n,i;scanf(%d,&n);for(i=0;in;i+) /讀入n個字符串gets(stri);strcpy(maxStr, str0); /第一個字符串做臨時最大值for(i=1;i0) /若stri比maxStr大,則替換maxStrstrc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論