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

下載本文檔

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

文檔簡介

字符數(shù)組與字符串chara='W';charb='a';charc='n';chard='g';chare='L';charf='i';如何讓程序存儲我的姓名?WangLicharname[15]={'W','a','n','g','L','i'};用若干個字符用字符數(shù)組用字符串charname[15]=“WangLi”;5.3.1一維字符數(shù)組一維字符數(shù)組的定義、引用、初始化與其他類型的一維數(shù)組一樣。charstr[80];

定義一個含有80個字符型元素的數(shù)組str

chart[5]={'H','a','p','p','y'};初始化數(shù)組t

t[0]t[1]t[4]t

Happy輸出數(shù)組t的所有元素for(i=0;i<5;i++)putchar(t[i]);5.3.2字符串字符串常量是雙引號括起的任意字符序列"HelloWorld""WangPing""Pleaseenteryourfullname:"“Hello!\n"字符串常量中可以包含轉義序列HelloWorld\0字符串結束符字符串的有效長度:有效字符的個數(shù)字符串常量字符串的存儲autochars[80]="Happy";字符串遇'\0'結束第一個'\0'前面的所有字符和'\0'

一起構成了字符串"Happy”'\0'

之后的其他數(shù)組元素與該字符串無關

s[0]s[1]s[5]s

Happy\0

?

?字符串由有效字符和字符串結束符

'\0'組成

字符串與字符數(shù)組在C語言中沒有專門的字符串變量,通常用一個字符數(shù)組來存放一個字符串字符數(shù)組和字符串的區(qū)別是:字符串的末尾有一個空字符‘\0’字符串可按如下方式聲明并初始化:charname[15]={'W','a','n','g','L','i','\0'};charname[15]="WangLi";charpassword[]="12345678";手工加入一個空字符系統(tǒng)將自動加入一個空字符省略數(shù)組大小,系統(tǒng)自動計算,大小為后面的字符總數(shù)加1,最后一個元素存入一個空字符。2.對字符串的操作把字符串放入一維字符數(shù)組(存儲)對字符串的操作===>對字符數(shù)組的操作普通字符數(shù)組:數(shù)組元素的個數(shù)是確定的,一般用下標控制循環(huán)字符串:沒有顯式地給出有效字符的個數(shù),只規(guī)定在字符串結束符

'\0'

之前的字符都是字符串的有效字符,一般用結束符

'\0'

來控制循環(huán)循環(huán)條件:s[i]!='\0'

5.3.3字符串的輸入輸出例11從鍵盤讀入一個字符串,以回車符表示輸入結束。輸出該字符串長度,然后輸出該字符串方法1:象普通數(shù)組一樣逐元素輸入輸出輸入:s[0]=getchar();//讀入第一個字符i=0;while(s[i]!=‘\n’)//當不是回車{ i++; s[i]=getchar();}s[i]='\0';//將’\n’轉換為'\0'或i=0;while((s[i]=getchar())!='\n')i++;s[i]=‘\0’;//將’\n’轉換為‘\0’for(i=0;s[i]!=‘\0’;i++)putchar(s[i]);字符串長度是i還是i-1、i+1?字符串長度是有效字符個數(shù)s[0]…s[i-1],共i個輸出字符串,不需要知道字符個數(shù),’\0’是結束標志W(wǎng)ang

Li\n\0方法2:用%s整體輸入輸出charname[10];scanf("%s",name);printf("%s",name);格式描述串中使用轉換字符串“%s”WangLiWang\0使用scanf時,不能輸入空格Wang空格是%s輸入結束的標志方法3:用gets和puts函數(shù)charname[10];gets(name);puts(name);WangLi\0WangLiWangLi從鍵盤上讀入一個完整的行,存入字符數(shù)組name。并用空字符'\0'取代行尾的換行符'\n'。把字符數(shù)組中的字符串輸出到顯示器。使用gets函數(shù)允許輸入空格5.3.4字符串應用舉例例12.

輸入一行字符(字符個數(shù)不多于80),統(tǒng)計其中空格的個數(shù)思路分析:(1)定義字符數(shù)組str[81];(2)讀入字符串若字符串確定不含空格,可以用scanf(“%s”,str);若可能含有空格,用gets(str);(3)掃描整個字符串(不需要知道字符個數(shù))for(i=0;str[i]!=‘\0’;i++){……}#include<stdio.h>intmain(){charstr[81];inti,count=0;printf("\n請輸入一行字符:\n");

gets(str);for(i=0;str[i]!='\0‘;i++){ if(str[i]=='') count++;}printf(“\n其中的空格總數(shù)為

%d\n",count);}Cisaprogramminglanguage在循環(huán)執(zhí)行時,掃描整個數(shù)組以統(tǒng)計出空格‘‘的數(shù)量,直到遇到字符’\0’。其中的空格總數(shù)為4也可用while循環(huán)i=0;while(str[i]!='\0'){if(str[i]=='')count++;i++;}輸入一個以回車結束的字符串(少于80個字符),統(tǒng)計其中數(shù)字字符的個數(shù)。模仿練習:#include<stdio.h>intmain(){intcount,i;charstr[80];printf("Enterastring:");gets(str);count=0;for(i=0;str[i]!=‘\0’;i++)//若是數(shù)字if(str[i]<='9'&&str[i]>='0')count++;printf("count=%d\n",count);return0;}模仿練習

源程序Enterastring:It's512?count=3012345678sIt's512

\0

??例13進制轉換輸入一個以回車結束的字符串(少于80個字符),把字符串中的所有數(shù)字字符(0~9)轉換為整數(shù),去掉其他字符。例如,字符串”3a56bc”,轉換后的整數(shù)為356難點分析:如何將字符串轉化為整數(shù)值?例如字符串”356“轉換為整數(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;str[i]!='\0‘;i++){if(str[i]>=‘0’&&str<=‘9’')d=d*10+(str[i]-’0’)}str[i]中存的是字符,str[i]-’0’將其轉化為對應的十進制數(shù)字#include<stdio.h>intmain(){intd,i;charstr[80];printf("Enterastring:");gets(str);d=0;for(i=0;str[i]!='\0';i++)//若是數(shù)字if(str[i]<='9'&&str[i]>='0')

d=d*10+(str[i]-'0')printf(“d=%d\n",d);return0;}

例14統(tǒng)計單詞個數(shù)方法1:統(tǒng)計空格數(shù)??問題:沒考慮多個空格相連的情況方法2:如果一個空格緊跟一個非空格,一定是新單詞開始

thisismyfirsttest!

問:第一個單詞沒算上?答:count在加1就行????再問:若第一個單詞前有空格會怎樣?就又多了1思路分析方法3:如果一個非空格后是一個空格,一定是單詞的結束

thisismyfirsttest!

問:最后一個單詞沒算上?答:count在加1就行?。??再問:若最后一個單詞后有空格會怎樣?就又多了1思路分析方法4:設置一個標志變量word開始word置0For(i=0;str[i]!=‘\0’;i++)//掃描整個字符串若str[i]是空格

word置0若str[i]不是空格且word==0

則新單詞出現(xiàn),count++;word置1;

#include<stdio.h>intmain(){charstr[1000];inti,word,count;word=0;count=0;gets(str);for(i=0;str[i]!='\0';i++){if(str[i]=='')word=0;if(str[i]!=''&&word==0)//新單詞出現(xiàn)

{count++;word=1;}}printf("%d\n",count);}

程序實現(xiàn)5.3.5常用字符串函數(shù)以下介紹的字符串函數(shù)定義在頭文件<string.h>中(1)strlen:求字符串長度(2)strcpy:字符串復制(賦值)(3)strcmp:字符串比較(4)strcat:字符串合并2023/2/621(1)求字符串長度strlen()調(diào)用格式:strlen(str)功能:測試字符串長度。函數(shù)值就是str中字符的個數(shù)。輸出結果:5例如:charstr[10]="China";printf("%d",strlen(str));或printf("%d",strlen("China"));2023/2/622(2)字符串復制函數(shù)strcpy()調(diào)用格式:strcpy(str1,str2)功能:將str2中的字符串復制到str1數(shù)組中。Beijing\0思考:這樣賦值s1="Beijing";或s1=s2;可以嗎?為什么?s1的結果例如:chars1[10],s2[]="Beijing";strcpy(s1,s2);或:strcpy(s1,"Beijing");字符串的賦值需要通過strcpy實現(xiàn)charstr1[10]=“China”;正確charstr1[10];str1=“China”;錯誤改為:charstr1[10];strcpy(str1,“China”);charstr1[10],str2[]=“China”;str1=str2;改為:charstr1[10],str2[]=“China”;strcpy(str1,str2);為什么不允許這樣賦值?因為數(shù)組名是一個常量,代表數(shù)組的首地址,常量不可以被賦值,其值不可改變錯誤24(3)字符串比較函數(shù)strcmp()調(diào)用格式:strcmp(str1,str2)功能:比較str1和str2的大小,若前者大則返回一個正整數(shù),若后者大則返回一個負整數(shù),若兩者相等,則返回0。注意:比較兩個字符串的大小只能使用此函數(shù),而不能使用“>”、“<”、“==”等關系運算符。字符串比較規(guī)則:按自左至右的順序,對應字符比較,若當前對應字符不同,則返回二者ASCII碼的差,若二者相同,則比較下一個字符,直到遇到不同字符為止,函數(shù)返回值為兩字符的差

str1str2“cat”“fan”“abcde”“abd”“abcde”“abc”“abc”“abc”<<>==strcmp(str1,str2)<0strcmp(str1,str2)<0strcmp(str1,str2)>0strcmp(str1,str2)==02023/2/625(4)字符串連接函數(shù)strcat()調(diào)用格式:strcat(str1,str2)功能:把str2中的字符串連接到str1字符串的后面,結果放在str1數(shù)組中.beijingandshanghai\0Str1必須足夠大輸出結果:beijingandshanghai例如:charstr1[21]="beijingand";charstr2[]="shanghai";strcat(str1,str2);printf("%s",str1);(5)字符串逆置函數(shù)strrev()調(diào)用格式:strrev(str)功能:將字符串str前后顛倒charstr[10]=“china”;strrev(str);puts(str);輸出:anihc小練習:輸入三個字符串,輸出最大的字符串5.3.6字符串數(shù)組一維字符數(shù)組可以存儲一個字符串,二維字符數(shù)組可以存儲多個字符串,稱為字符串數(shù)組。字符串數(shù)組的每一行元素中都含有字符串結束符’\0’,因此它的一行元素可以和字符串一樣輸入、輸出及初始化。如:charcolor[][10]={“red","blue",

"yellow",“green","purple"};例15:輸入n,輸入n個字符串輸出最大字符串字符串數(shù)組可以用二維字符數(shù)組存儲。假定字符串個數(shù)不多于100個,每個字符串長度不超過80例

溫馨提示

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

最新文檔

評論

0/150

提交評論