




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第九章字符串目錄/Contents字符串常量字符串的輸入輸出字符串處理函數(shù)字符數(shù)組和字符指針向函數(shù)傳遞字符串從函數(shù)返回一個字符串指針問題的提出用雙引號括起的一串字符是字符串常量,C語言自動為其添加′\0′結(jié)束符"Howareyou"Ilovechina\0一串以‘\0’結(jié)尾的字符在C語言中被看做字符串字符串的存儲是字符數(shù)組,但不代表字符串?dāng)?shù)組的最后一個元素必須是'\0'◆C語言并沒有為字符串提供任何專門的表示法,完全使用字符數(shù)組和字符指針來處理◆字符數(shù)組每個元素都是字符類型的數(shù)組
charstr[80];字符串初始化◆用字符型數(shù)據(jù)對數(shù)組進(jìn)行初始化charstr[7]={‘H',‘e',‘l',‘l',‘o',‘!’,'\0'};◆用字符串常量直接對數(shù)組初始化charstr[]={“Hello!"};charstr[]=“Hello!";◆多個字符串常量直接對二維數(shù)組初始化
charmonths[12][10]={"January","February","March","April","May","June","July","August","September","October","November","December"};字符指針定義和初始化方法不同
str=“World";World\0“World"ptrcharstr[6]={“World"};
char*ptr;ptr=“World";strWhy?數(shù)組名str是地址常量
字符指針ptr是變量
char*ptr=“World";字符指針char*ptr="World";*ptr="F";ptr=“HelloWorld!";charstr[]="World";char*ptr=str;prt=“HelloWorld!”;*ptr=“F”;字符指針ptr是變量,可以指向不同的字符串,但不能修改字符串的值,”World”是字符串常量
字符指針要修改字符串中的字符,必須先用字符數(shù)組存儲字符串,再讓字符指針指向該字符數(shù)組字符串的輸入/輸出(逐個字符輸入)inti=0;while((str[i++]=getchar())!=‘\n’);str[i]=‘\0’;按字符逐個輸入charstr[10];字符串的輸入/輸出(逐個字符輸出)按字符逐個輸入/輸出for(i=0;str[i]!='\0';i++){ putchar(str[i]);}putchar('\n');charstr[10];一般不用字符串長度控制字符串的輸入/輸出(逐個字符輸入/輸出)【例9.1】
按%c格式控制符,從鍵盤輸入一個字符串,并將它顯示出來。#include<stdio.h>#defineN20intmain(){ inti; charstr[N]; printf("Enterastring:"); for(i=0;i<N-1;i++) { scanf("%c",&str[i]); } str[i]=‘\0’; for(i=0;str[i]!='\0';i++) { printf("%c",str[i]); } return0;}字符串的輸入/輸出(整體輸入/輸出)按字符串整體輸入/輸出scanf("%s",str);printf("%s",str);charstr[10];gets(str);puts(str);不能輸入帶空格的字符串可以輸入帶空格的字符串空格、回車或制表(Tab)符是輸入數(shù)據(jù)的分隔符,因而不能被讀入,輸入遇到這些字符時,系統(tǒng)認(rèn)為字符串輸入結(jié)束【例9.2】
按%s格式控制符,從鍵盤輸入一個字符串,并將它顯示出來。#include<stdio.h>#defineN20intmain(){ charname[N]; printf("Enteryourname:"); scanf("%s",name); printf("Hello%s",name); return0;}字符串的輸入/輸出Why?字符串的輸入/輸出【例9.3】
使用gets()從鍵盤輸入一個帶空格的字符串,然后使用puts()把它顯示出來。#include<stdio.h>#defineN20intmain(){ charstring[N];char*ptr=string; printf("Enterastring:"); gets(ptr); printf(“Hello%s!\n”,ptr); return0;}不限制輸入字符串的長度易引起緩沖區(qū)溢出,給黑客攻擊以可乘之機(jī)【例9.3】
使用gets()從鍵盤輸入一個帶空格的字符串,然后使用puts()把它顯示出來。#include<stdio.h>#defineN20intmain(){ charstring[N]; printf("Enterastring:"); gets(string); puts(string); return0;}#include<stdio.h>#defineN20intmain(){charstring[N];printf("Enterastring:");fgets(string,sizeof(string),stdin);puts(string);return0;}字符串的輸入/輸出例9.3如果用戶輸入的字符個數(shù)超過了數(shù)組的長度,導(dǎo)致程序出錯或異常終止更安全的方法是用fgets函數(shù)#include<stdio.h>#defineN20intReadLine(charstr[],intn);intmain(){ charstring[N]; intn; printf("Enterastring:"); n=ReadLine(string,N); puts(string); printf("n=%d",n); return0;}intReadLine(charstr[],intn){ charch; inti=0; while((ch=getchar())!='\n') if(i<n) str[i++]=ch; str[i]='\0'; returni;}字符串的輸入/輸出安全靈活!字符串處理函數(shù)◆#include<string.h>strcpy(目的字符串,源字符串);字符串復(fù)制strlen(字符串);字符串長度strcat(目的字符串,源字符串);字符串連接strcmp(字符串1,字符串2);字符串比較字符串處理函數(shù)◆#include<string.h>strlen(字符串);字符串長度charstr[10]={"China"};printf("%d",
strlen(str));打印結(jié)果是5、6,還是10?China\0\0\0\0\0不包括\0的實際字符的個數(shù)字符串處理函數(shù)◆#include<string.h>strlen(字符串);字符串長度len=
strlen(str);for(i=0;i<len;i++){ putchar(str[i]);}putchar('\n');用長度控制字符串輸出字符串處理函數(shù)◆#include<string.h>strcpy(目的字符串,源字符串);字符串復(fù)制字符串能否用=整體復(fù)制?str2=str1;strcpy(str2,str1);注意復(fù)制的方向!str2必須足夠大!想想這個函數(shù)是如何實現(xiàn)字符串復(fù)制的?◆#include<string.h>strcat(目的字符串,源字符串);字符串連接strcat(str2,str1);str2必須足夠大!Hello\0\0\0\0\0\0\0
China\0HelloChina\0\0字符串處理函數(shù)◆#include<string.h>strcmp(字符串1,字符串2);字符串比較字符串能否用>、<、==比較大小?if(str2==str1)if(strcmp(str2,str1)==0)字符串處理函數(shù)◆#include<string.h>strcmp(字符串1,字符串2);字符串比較字符串是如何比較大小的?當(dāng)出現(xiàn)第一對不相等的字符時,就由這兩個字符決定所在字符串的大小,返回其ASCII碼比較的結(jié)果值comparecomputercompare<computer表示strcmp(str1,str2)<0為真字符串處理函數(shù)#include<stdio.h>#include<string.h>#defineM20#defineN10voidSortName(charstr[][N],intn)intmain(){ inti,n; charname[M][N]; printf("Inputthenumberofpersons:"); scanf("%d",&n); getchar();/*清空緩沖區(qū)*/ printf("Inputtheirnames:\n"); for(i=0;i<n;i++) { gets(name[i]);/*輸入n個人名*/ } SortName(name,n); printf("Aftersortedresults:\n"); for(i=0;i<n;i++) { puts(name[i]); } return0;}【例9.5】
從鍵盤輸入不超過20人的名字字符串,用函數(shù)編寫這些字符串的排序程序并測試之。運(yùn)行結(jié)果:(屏幕顯示)Inputthenumberofpersons:3Inputtheirnames:JohnWhitePeterAftersortedresults:JohnPeterWhite字符串處理函數(shù)應(yīng)用voidSortName(charstr[][N],intn){ inti,j; chartemp[N]; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(strcmp(str[j],str[i])<0)/*字符串比較,不能使用關(guān)系運(yùn)算符*/ { strcpy(temp,str[i]); strcpy(str[i],str[j]); strcpy(str[j],temp); } } }}字符串處理函數(shù)應(yīng)用向函數(shù)傳遞字符串◆向函數(shù)傳遞字符串時,既可使用字符數(shù)組作函數(shù)參數(shù),也可使用字符指針作函數(shù)參數(shù)◆地址傳遞向函數(shù)傳遞字符串【例9.6】
編寫一個記錄字符串中單詞個數(shù)的函數(shù),并測試之。#include<stdio.h>#defineN80intWordCount(constcharstr)intmain(){ chars[N]; intcnt; printf("Inputastring:"); gets(s); cnt=WordCount(s); printf("cnt=%d",cnt); return0;}intWordCount(constcharstr[]){intcount=0;inti=0;while(str[i]!='\0'){while(isspace(str[i]))++i;if(str[i]!='\0'){++count;while(!isspace(str[i])&&str[i]!='\0') ++i;}}returncount; }向函數(shù)傳遞字符串#include<stdio.h>#defineN80intWordCount(constchar*str);intmain(){ chars[N]; intcnt; printf("Inputastring:"); gets(s); cnt=WordCount(s); printf("cnt=%d",cnt); return0;}intWordCount(constchar*str){ intcount=0; while(*str!='\0') { while(isspace(*str)) ++str; if(*str!='\0') { ++count; while(!isspace(*str)&&*str!='\0') ++str; } } returncount;}用字符指針表示字符串向函數(shù)傳遞字符串【例9.7】
編寫程序,從鍵盤輸入一行字符串,把字符串中每個字母e均變?yōu)镋,然后創(chuàng)建一個新串,并將每個單詞換行顯示出來。#include<stdio.h>#defineM100voidReadLine(charstr[]);char*Change(constchar*);intmain(){chars[M];printf("\nWhatisyour
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國旅游景點(diǎn)2
- 介紹小學(xué)教育專業(yè)
- 實驗操作活動教案
- 地下礦山安全教育課件
- 關(guān)注供應(yīng)鏈管理與財務(wù)的協(xié)同計劃
- 為企業(yè)提供財務(wù)建議的實踐計劃
- 水生態(tài)修復(fù)與恢復(fù)措施計劃
- 調(diào)動員工積極性的年度舉措計劃
- 班級資源共享與合作學(xué)習(xí)的主題計劃
- 醫(yī)療設(shè)備新購與管理策略總結(jié)計劃
- 電動摩托車項目可行性實施報告
- 甲殼素、殼聚糖材料
- 菜鳥驛站招商加盟合同范本
- 2024年高考地理真題完全解讀(甘肅卷)
- DL∕T 806-2013 火力發(fā)電廠循環(huán)水用阻垢緩蝕劑
- 人教版 九年級上冊音樂 第二單元 鱒魚 教案
- 四年級美術(shù)測國測復(fù)習(xí)題答案
- 《寬容別人 快樂自己》班會課件
- 2024光伏電站索懸柔性支架施工方案
- 仲裁法全套課件
- 教育家精神專題講座課件
評論
0/150
提交評論