版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
字符數(shù)組與字符串chara='W';charb='a';charc='n';chard='g';chare='L';charf='i';如何讓程序存儲(chǔ)我的姓名?WangLicharname[15]={'W','a','n','g','L','i'};用若干個(gè)字符用字符數(shù)組用字符串charname[15]=“WangLi”;5.3.1一維字符數(shù)組一維字符數(shù)組的定義、引用、初始化與其他類型的一維數(shù)組一樣。charstr[80];
定義一個(gè)含有80個(gè)字符型元素的數(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字符串字符串常量是雙引號(hào)括起的任意字符序列"HelloWorld""WangPing""Pleaseenteryourfullname:"“Hello!\n"字符串常量中可以包含轉(zhuǎn)義序列HelloWorld\0字符串結(jié)束符字符串的有效長度:有效字符的個(gè)數(shù)字符串常量字符串的存儲(chǔ)autochars[80]="Happy";字符串遇'\0'結(jié)束第一個(gè)'\0'前面的所有字符和'\0'
一起構(gòu)成了字符串"Happy”'\0'
之后的其他數(shù)組元素與該字符串無關(guān)
s[0]s[1]s[5]s
Happy\0
?
?字符串由有效字符和字符串結(jié)束符
'\0'組成
字符串與字符數(shù)組在C語言中沒有專門的字符串變量,通常用一個(gè)字符數(shù)組來存放一個(gè)字符串字符數(shù)組和字符串的區(qū)別是:字符串的末尾有一個(gè)空字符‘\0’字符串可按如下方式聲明并初始化:charname[15]={'W','a','n','g','L','i','\0'};charname[15]="WangLi";charpassword[]="12345678";手工加入一個(gè)空字符系統(tǒng)將自動(dòng)加入一個(gè)空字符省略數(shù)組大小,系統(tǒng)自動(dòng)計(jì)算,大小為后面的字符總數(shù)加1,最后一個(gè)元素存入一個(gè)空字符。2.對字符串的操作把字符串放入一維字符數(shù)組(存儲(chǔ))對字符串的操作===>對字符數(shù)組的操作普通字符數(shù)組:數(shù)組元素的個(gè)數(shù)是確定的,一般用下標(biāo)控制循環(huán)字符串:沒有顯式地給出有效字符的個(gè)數(shù),只規(guī)定在字符串結(jié)束符
'\0'
之前的字符都是字符串的有效字符,一般用結(jié)束符
'\0'
來控制循環(huán)循環(huán)條件:s[i]!='\0'
5.3.3字符串的輸入輸出例11從鍵盤讀入一個(gè)字符串,以回車符表示輸入結(jié)束。輸出該字符串長度,然后輸出該字符串方法1:象普通數(shù)組一樣逐元素輸入輸出輸入:s[0]=getchar();//讀入第一個(gè)字符i=0;while(s[i]!=‘\n’)//當(dāng)不是回車{ i++; s[i]=getchar();}s[i]='\0';//將’\n’轉(zhuǎn)換為'\0'或i=0;while((s[i]=getchar())!='\n')i++;s[i]=‘\0’;//將’\n’轉(zhuǎn)換為‘\0’for(i=0;s[i]!=‘\0’;i++)putchar(s[i]);字符串長度是i還是i-1、i+1?字符串長度是有效字符個(gè)數(shù)s[0]…s[i-1],共i個(gè)輸出字符串,不需要知道字符個(gè)數(shù),’\0’是結(jié)束標(biāo)志W(wǎng)ang
Li\n\0方法2:用%s整體輸入輸出charname[10];scanf("%s",name);printf("%s",name);格式描述串中使用轉(zhuǎn)換字符串“%s”WangLiWang\0使用scanf時(shí),不能輸入空格Wang空格是%s輸入結(jié)束的標(biāo)志方法3:用gets和puts函數(shù)charname[10];gets(name);puts(name);WangLi\0WangLiWangLi從鍵盤上讀入一個(gè)完整的行,存入字符數(shù)組name。并用空字符'\0'取代行尾的換行符'\n'。把字符數(shù)組中的字符串輸出到顯示器。使用gets函數(shù)允許輸入空格5.3.4字符串應(yīng)用舉例例12.
輸入一行字符(字符個(gè)數(shù)不多于80),統(tǒng)計(jì)其中空格的個(gè)數(shù)思路分析:(1)定義字符數(shù)組str[81];(2)讀入字符串若字符串確定不含空格,可以用scanf(“%s”,str);若可能含有空格,用gets(str);(3)掃描整個(gè)字符串(不需要知道字符個(gè)數(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í),掃描整個(gè)數(shù)組以統(tǒng)計(jì)出空格‘‘的數(shù)量,直到遇到字符’\0’。其中的空格總數(shù)為4也可用while循環(huán)i=0;while(str[i]!='\0'){if(str[i]=='')count++;i++;}輸入一個(gè)以回車結(jié)束的字符串(少于80個(gè)字符),統(tǒng)計(jì)其中數(shù)字字符的個(gè)數(shù)。模仿練習(xí):#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;}模仿練習(xí)
源程序Enterastring:It's512?count=3012345678sIt's512
\0
??例13進(jìn)制轉(zhuǎn)換輸入一個(gè)以回車結(jié)束的字符串(少于80個(gè)字符),把字符串中的所有數(shù)字字符(0~9)轉(zhuǎn)換為整數(shù),去掉其他字符。例如,字符串”3a56bc”,轉(zhuǎn)換后的整數(shù)為356難點(diǎn)分析:如何將字符串轉(zhuǎn)化為整數(shù)值?例如字符串”356“轉(zhuǎn)換為整數(shù)356(1)遇到第一個(gè)整數(shù)3,d=3;(2)遇到第二個(gè)整數(shù)5,d=d*10+5=35(3)遇到第三個(gè)整數(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’將其轉(zhuǎn)化為對應(yīng)的十進(jìn)制數(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)計(jì)單詞個(gè)數(shù)方法1:統(tǒng)計(jì)空格數(shù)??問題:沒考慮多個(gè)空格相連的情況方法2:如果一個(gè)空格緊跟一個(gè)非空格,一定是新單詞開始
thisismyfirsttest!
問:第一個(gè)單詞沒算上?答:count在加1就行!??再問:若第一個(gè)單詞前有空格會(huì)怎樣?就又多了1思路分析方法3:如果一個(gè)非空格后是一個(gè)空格,一定是單詞的結(jié)束
thisismyfirsttest!
問:最后一個(gè)單詞沒算上?答:count在加1就行????再問:若最后一個(gè)單詞后有空格會(huì)怎樣?就又多了1思路分析方法4:設(shè)置一個(gè)標(biāo)志變量word開始word置0For(i=0;str[i]!=‘\0’;i++)//掃描整個(gè)字符串若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);}
程序?qū)崿F(xiàn)5.3.5常用字符串函數(shù)以下介紹的字符串函數(shù)定義在頭文件<string.h>中(1)strlen:求字符串長度(2)strcpy:字符串復(fù)制(賦值)(3)strcmp:字符串比較(4)strcat:字符串合并2023/2/621(1)求字符串長度strlen()調(diào)用格式:strlen(str)功能:測試字符串長度。函數(shù)值就是str中字符的個(gè)數(shù)。輸出結(jié)果:5例如:charstr[10]="China";printf("%d",strlen(str));或printf("%d",strlen("China"));2023/2/622(2)字符串復(fù)制函數(shù)strcpy()調(diào)用格式:strcpy(str1,str2)功能:將str2中的字符串復(fù)制到str1數(shù)組中。Beijing\0思考:這樣賦值s1="Beijing";或s1=s2;可以嗎?為什么?s1的結(jié)果例如:chars1[10],s2[]="Beijing";strcpy(s1,s2);或:strcpy(s1,"Beijing");字符串的賦值需要通過strcpy實(shí)現(xiàn)charstr1[10]=“China”;正確charstr1[10];str1=“China”;錯(cuò)誤改為:charstr1[10];strcpy(str1,“China”);charstr1[10],str2[]=“China”;str1=str2;改為:charstr1[10],str2[]=“China”;strcpy(str1,str2);為什么不允許這樣賦值?因?yàn)閿?shù)組名是一個(gè)常量,代表數(shù)組的首地址,常量不可以被賦值,其值不可改變錯(cuò)誤24(3)字符串比較函數(shù)strcmp()調(diào)用格式:strcmp(str1,str2)功能:比較str1和str2的大小,若前者大則返回一個(gè)正整數(shù),若后者大則返回一個(gè)負(fù)整數(shù),若兩者相等,則返回0。注意:比較兩個(gè)字符串的大小只能使用此函數(shù),而不能使用“>”、“<”、“==”等關(guān)系運(yùn)算符。字符串比較規(guī)則:按自左至右的順序,對應(yīng)字符比較,若當(dāng)前對應(yīng)字符不同,則返回二者ASCII碼的差,若二者相同,則比較下一個(gè)字符,直到遇到不同字符為止,函數(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字符串的后面,結(jié)果放在str1數(shù)組中.beijingandshanghai\0Str1必須足夠大輸出結(jié)果: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小練習(xí):輸入三個(gè)字符串,輸出最大的字符串5.3.6字符串?dāng)?shù)組一維字符數(shù)組可以存儲(chǔ)一個(gè)字符串,二維字符數(shù)組可以存儲(chǔ)多個(gè)字符串,稱為字符串?dāng)?shù)組。字符串?dāng)?shù)組的每一行元素中都含有字符串結(jié)束符’\0’,因此它的一行元素可以和字符串一樣輸入、輸出及初始化。如:charcolor[][10]={“red","blue",
"yellow",“green","purple"};例15:輸入n,輸入n個(gè)字符串輸出最大字符串字符串?dāng)?shù)組可以用二維字符數(shù)組存儲(chǔ)。假定字符串個(gè)數(shù)不多于100個(gè),每個(gè)字符串長度不超過80例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年衡陽市珠暉區(qū)人民法院公開招聘聘用制書記員備考題庫及參考答案詳解
- 智能機(jī)器人在患者健康教育中的臨床應(yīng)用與實(shí)踐體系
- 2025年中國社會(huì)科學(xué)院考古研究所石窟寺考古研究室考古技師招聘備考題庫及1套完整答案詳解
- 地下空間開發(fā)項(xiàng)目建議書
- 惠農(nóng)區(qū)委全面依法治區(qū)委員會(huì)辦公室關(guān)于選聘行政執(zhí)法監(jiān)督員20人的備考題庫及完整答案詳解一套
- 草學(xué)專業(yè)就業(yè)方向
- 護(hù)理禮儀的倫理考量
- 七年級(jí)網(wǎng)絡(luò)安全課件
- 提升內(nèi)科??谱o(hù)理質(zhì)量的
- 《行測》歷年真題庫試卷匯編(滿分必刷)
- 西安市2024陜西西安市專職消防員管理中心招聘事業(yè)編制人員筆試歷年參考題庫典型考點(diǎn)附帶答案詳解(3卷合一)
- 吉安市農(nóng)業(yè)農(nóng)村發(fā)展集團(tuán)有限公司及下屬子公司2025年第二批面向社會(huì)公開招聘備考題庫有答案詳解
- 文冠果整形修剪課件
- 2025年鹽城港控股招聘面試題庫及答案
- 2026年益陽醫(yī)學(xué)高等專科學(xué)校單招職業(yè)技能測試題庫附答案
- 國家開放大學(xué)《商務(wù)英語4》期末考試精準(zhǔn)題庫
- 2025秋季《中華民族共同體概論》期末綜合考試-國開(XJ)-參考資料
- 機(jī)械通氣患者誤吸預(yù)防及管理規(guī)范
- 2025年應(yīng)急環(huán)境監(jiān)測車行業(yè)分析報(bào)告及未來發(fā)展趨勢預(yù)測
- AI生成時(shí)代虛擬生產(chǎn)力與生產(chǎn)關(guān)系變革
- 船舶進(jìn)出港調(diào)度智能化方案
評論
0/150
提交評論