第6章_字符串_第1頁(yè)
第6章_字符串_第2頁(yè)
第6章_字符串_第3頁(yè)
第6章_字符串_第4頁(yè)
第6章_字符串_第5頁(yè)
已閱讀5頁(yè),還剩58頁(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、第第6 6章章 字符串字符串字符串基礎(chǔ)(概念、表示、輸入輸出)字符串基礎(chǔ)(概念、表示、輸入輸出)字符串的基本運(yùn)算字符串的基本運(yùn)算字符串應(yīng)用舉例(數(shù)值與字符串的轉(zhuǎn)換、字符串應(yīng)用舉例(數(shù)值與字符串的轉(zhuǎn)換、單詞分離)單詞分離)&字符常量字符常量v定義定義: :用用單引號(hào)單引號(hào)括起來(lái)的單個(gè)括起來(lái)的單個(gè)普通字符普通字符或或轉(zhuǎn)義字符轉(zhuǎn)義字符. v字符常量的字符常量的值值:該字符的:該字符的ASCIIASCII碼碼值值轉(zhuǎn)義字符及其含義:轉(zhuǎn)義字符及其含義:轉(zhuǎn)義字符含義nvradddtbf“xhh轉(zhuǎn)義字符含義換行垂直制表回車響鈴單引號(hào)3位8進(jìn)制數(shù)代表的字符水平制表退格換頁(yè)反斜線雙引號(hào)2位16進(jìn)制數(shù)代表的字符例:

2、A-101-x41-65如 A65, a97, 048 , n10如 a A ? n 101v轉(zhuǎn)義字符轉(zhuǎn)義字符: :反斜線后面跟一個(gè)字符或一個(gè)代碼值表示反斜線后面跟一個(gè)字符或一個(gè)代碼值表示6.1 6.1 字符數(shù)據(jù)字符數(shù)據(jù)v字符常量與字符串常量不同字符常量與字符串常量不同&字符串常量字符串常量v定義:用雙引號(hào)定義:用雙引號(hào)( () )括起來(lái)的字符序列括起來(lái)的字符序列v存儲(chǔ):存儲(chǔ):每個(gè)字符串尾每個(gè)字符串尾自動(dòng)自動(dòng)加一個(gè)加一個(gè) 00 作為字符串作為字符串結(jié)束標(biāo)志結(jié)束標(biāo)志h e l l o 0例例 字符串字符串hellohello在內(nèi)存中在內(nèi)存中a a 0例 aa例例 空串空串 0例: char ch

3、; ch=A; 例: char ch; ch=A; 【例【例6-16-1】觀察下面程序的運(yùn)行結(jié)果】觀察下面程序的運(yùn)行結(jié)果,注意轉(zhuǎn)義字符的使用注意轉(zhuǎn)義字符的使用 #include void main( ) printf(%d,%cn,a,a); printf(%d,%cn,A+1,A+1); printf(%dn,a-A); printf(%d,%dn,1,x1); printf(%d,%cn,25,x15); printf(I am OKn );字符型變量字符型變量字符的輸入與輸出字符的輸入與輸出scanfscanf和和printfprintfscanf(%c,&ch);從鍵盤輸入一個(gè)字符,并

4、將輸入的字符存從鍵盤輸入一個(gè)字符,并將輸入的字符存放在變量放在變量ch之中。之中。printf(%c,ch);將字符型變量將字符型變量ch的在屏幕上輸出。的在屏幕上輸出。 字符的輸入與輸出字符的輸入與輸出getcgetc和和putcputc字符輸入函數(shù):字符輸入函數(shù):函數(shù)原型:函數(shù)原型:char getc() 或者或者 char getchar()使用方法:使用方法:ch = getc() 或者或者 ch = getchar()字符輸出函數(shù)字符輸出函數(shù):函數(shù)原型:函數(shù)原型:putc(char ch) 或者或者 putchar(char ch)使用方法:使用方法:putc(ch) 或者或者 pu

5、tchar(ch)6.2 6.2 字符串字符串 字符串的存儲(chǔ)字符串的存儲(chǔ) 依次存儲(chǔ)每個(gè)字符依次存儲(chǔ)每個(gè)字符ASCII碼碼 例如字符串例如字符串”Strings.n” C C語(yǔ)言并沒有為字符串提供任何專門的表示語(yǔ)言并沒有為字符串提供任何專門的表示法,完全使用法,完全使用字符數(shù)組字符數(shù)組和和字符指針字符指針來(lái)處理來(lái)處理字符串就是一串以用字符串就是一串以用”引起來(lái)的字符引起來(lái)的字符, , C C語(yǔ)言自動(dòng)為其添加語(yǔ)言自動(dòng)為其添加00結(jié)束符結(jié)束符Hello China 字符表示:字符表示:Strings.n0ASCII碼表示碼表示:8311611410511010311546100用一維數(shù)組表示字符串用

6、一維數(shù)組表示字符串字符數(shù)組字符數(shù)組: :每個(gè)元素都是字符類型的數(shù)組每個(gè)元素都是字符類型的數(shù)組vchar str80;是字符數(shù)組,但不代表字符串是字符數(shù)組,但不代表字符串?dāng)?shù)組的最后一個(gè)元素必須是數(shù)組的最后一個(gè)元素必須是06.36.3 字符串的表示字符串的表示字符數(shù)組的初始化字符數(shù)組的初始化 逐個(gè)元素初始化逐個(gè)元素初始化 char str6 = C,h,i,n,a,0; 用字符串常量直接對(duì)數(shù)組初始化用字符串常量直接對(duì)數(shù)組初始化 char str11 = China; char str11 = China;必不可少的,必須自己寫上去必不可少的,必須自己寫上去系統(tǒng)會(huì)自動(dòng)加上系統(tǒng)會(huì)自動(dòng)加上 0 用指針表

7、示字符串變量用指針表示字符串變量 char *str=Hello China;只能進(jìn)行整體初始化 或者或者,在需要時(shí)給字符型指針賦值:在需要時(shí)給字符型指針賦值:char *cp,str =” Hello china!”; cp=str;字符指針就是指向字符類型數(shù)據(jù)的指針字符指針就是指向字符類型數(shù)據(jù)的指針str或者或者cp=Hello China;字符數(shù)組與字符指針的區(qū)別字符數(shù)組與字符指針的區(qū)別定義和初始化方法不同定義和初始化方法不同 char *pStr = Hello China;Hello ChinapStrchar str12 = Hello China; char *pStr;pStr

8、 = Hello China;strpStr = &str0;賦值方法不同賦值方法不同 str = Hello China;Hello Chinachar str12 = Hello China; char *pStr;pStr = Hello China;數(shù)組名數(shù)組名str是地址常量是地址常量 字符指針字符指針pStr是變量是變量 字符數(shù)組與字符指針的區(qū)別字符數(shù)組與字符指針的區(qū)別 char *cp; 與與 char str20;vchar str20; str=“I love China!”; ( ) char *cp; cp=“I love China!”; ( )vcp接受鍵入字符串時(shí)接

9、受鍵入字符串時(shí),必須必須先開辟存儲(chǔ)空間先開辟存儲(chǔ)空間例例 char str10; scanf(“%s”,str); ( )而而 char *cp; scanf(“%s”, cp); ( )改為改為: char *cp,str10; cp=str; scanf(“%s”,cp); ( )字符數(shù)組與字符針的區(qū)別字符數(shù)組與字符針的區(qū)別 6.4 6.4 字符串?dāng)?shù)組字符串?dāng)?shù)組(1) 用用字符型二維數(shù)組字符型二維數(shù)組表示字符串?dāng)?shù)組表示字符串?dāng)?shù)組(2) 用用字符型指針數(shù)組字符型指針數(shù)組表示字符串?dāng)?shù)組表示字符串?dāng)?shù)組6.4.1 6.4.1 用字符型二維數(shù)組表示字符串?dāng)?shù)組用字符型二維數(shù)組表示字符串?dāng)?shù)組char a

10、strMN;astr可以看做一個(gè)字符串?dāng)?shù)組??梢钥醋鲆粋€(gè)字符串?dāng)?shù)組。存儲(chǔ)存儲(chǔ)M個(gè)字符串,每一行就是一個(gè)字符串。個(gè)字符串,每一行就是一個(gè)字符串。每一個(gè)字符串最多可以存儲(chǔ)每一個(gè)字符串最多可以存儲(chǔ)N-1個(gè)字符。個(gè)字符。char a74=”SUN”,”MON”,”TUE”,”WED”,”THU”,”FRI”,”SAT”; 定義了定義了7個(gè)字符串,每個(gè)字符串最多可以有三個(gè)有效字符。個(gè)字符串,每個(gè)字符串最多可以有三個(gè)有效字符。char b 8=”well”,”good”,”middle”,”pass”,”bad”; 定義了定義了5個(gè)字符串,每個(gè)字符串最多可以有個(gè)字符串,每個(gè)字符串最多可以有7個(gè)字符。個(gè)字符

11、。.2用字符型指針數(shù)組表示字符串?dāng)?shù)組用字符型指針數(shù)組表示字符串?dāng)?shù)組char *pstr3 = Wuhan, Beijing, Shanghai;astr0Wuhan00000astr1Beijing000astr2Shanghai00char astr310=Wuhan, Beijing, Shanghai;pstr0Wuhan 0 pstr1Beijing 0 pstr2Shanghai0逐個(gè)輸入輸出逐個(gè)輸入輸出for (i=0; stri!=0; i+) putchar(stri);putchar(n);一般不用字符串長(zhǎng)度控制一般不用字符串長(zhǎng)度控制6.5 6.5 字符串的輸

12、入輸出字符串的輸入輸出 char str10;一次性輸入輸出一次性輸入輸出scanf(%s,str); printf(%s,str);char str10;gets(str); puts(str);不能輸入帶空格的字符串不能輸入帶空格的字符串可以輸入帶空格的字符串可以輸入帶空格的字符串6.5 6.5 字符串的輸入輸出字符串的輸入輸出 scanf(%s,str); printf(%s,str);char str10;gets(str); puts(str);空格、回車或跳空格、回車或跳格(格(TabTab)符作為)符作為輸入數(shù)據(jù)的分隔輸入數(shù)據(jù)的分隔符,因而不能被符,因而不能被讀入,輸入遇到讀入,

13、輸入遇到這些字符時(shí),系這些字符時(shí),系統(tǒng)認(rèn)為字符串輸統(tǒng)認(rèn)為字符串輸入結(jié)束入結(jié)束strstr本身是指針,所以本身是指針,所以strstr前就不前就不應(yīng)該再加取地址運(yùn)算符應(yīng)該再加取地址運(yùn)算符“&”&”了了 6.5 6.5 字符串的輸入輸出字符串的輸入輸出 scanf()函數(shù)函數(shù)格式:格式:scanf(%s, str) 功能:從鍵盤輸入一以空格或回車結(jié)束的字符串放入字符串中,功能:從鍵盤輸入一以空格或回車結(jié)束的字符串放入字符串中,并自動(dòng)加并自動(dòng)加0說(shuō)明:說(shuō)明: 輸入串長(zhǎng)度應(yīng)小于字符數(shù)組維數(shù),輸入串長(zhǎng)度應(yīng)小于字符數(shù)組維數(shù),str可以是字符數(shù)組名,也可以是字符數(shù)組名,也可以是字符指針名可以是字符指針名。如

14、果是字符指針名,必須先為字符指針分配。如果是字符指針名,必須先為字符指針分配空間??臻g。 輸入串中的前導(dǎo)空格忽略,中間的空格作為輸入結(jié)束標(biāo)志輸入串中的前導(dǎo)空格忽略,中間的空格作為輸入結(jié)束標(biāo)志例如:例如:char str80; scanf (%s, str);當(dāng)輸入:當(dāng)輸入:hellochina 時(shí),時(shí),str將是:將是:hello說(shuō)明:說(shuō)明: (3 3)如果利用一個(gè))如果利用一個(gè)scanfscanf函數(shù)輸入多個(gè)字符串,則函數(shù)輸入多個(gè)字符串,則在輸入時(shí)以空格分隔。在輸入時(shí)以空格分隔。例如:例如:char strlchar strl5 5,str2str25 5,str3str35 5; ;sca

15、nfscanf(%s%s%s(%s%s%s,str1str1,str2str2,str3);str3);輸入數(shù)據(jù):輸入數(shù)據(jù):How are you? How are you? 數(shù)組中未被賦值的元素的值自動(dòng)置數(shù)組中未被賦值的元素的值自動(dòng)置00。(4 4)使用)使用%ns%ns格式控制符限制輸入的字符個(gè)數(shù)格式控制符限制輸入的字符個(gè)數(shù) 注意:注意:scanfscanf函數(shù)中的輸入項(xiàng)如果字符數(shù)組名。不要函數(shù)中的輸入項(xiàng)如果字符數(shù)組名。不要再加地址符再加地址符& &,因?yàn)樵冢驗(yàn)樵贑 C語(yǔ)言中數(shù)組名代表該數(shù)組的語(yǔ)言中數(shù)組名代表該數(shù)組的起始地址。起始地址。下面寫法不對(duì):下面寫法不對(duì):scanf(%sscan

16、f(%s,&str&str) );getsgets函數(shù)函數(shù)格式:格式:gets(str) 頭文件:頭文件:stdio.h 功能:從鍵盤輸入一以回車結(jié)束的字符串放入字符功能:從鍵盤輸入一以回車結(jié)束的字符串放入字符數(shù)組中,并自動(dòng)加數(shù)組中,并自動(dòng)加0說(shuō)明:輸入串長(zhǎng)度應(yīng)小于字符數(shù)組長(zhǎng)度說(shuō)明:輸入串長(zhǎng)度應(yīng)小于字符數(shù)組長(zhǎng)度例如:例如:char str80; gets (str);輸入:輸入:Ilovechina! str中的字符串將是:中的字符串將是:I love china!字符串輸入函數(shù)的比較字符串輸入函數(shù)的比較getsgetsscanfscanf輸入的字符串中可包含空格字符輸入的字符串中可包含空格字

17、符輸入的字符串中不可包含空格字符輸入的字符串中不可包含空格字符只能輸入一個(gè)字符串只能輸入一個(gè)字符串可連續(xù)輸入多個(gè)字符串(使用可連續(xù)輸入多個(gè)字符串(使用%s%s%s%s)不可限定字符串的長(zhǎng)度不可限定字符串的長(zhǎng)度可限定字符串的長(zhǎng)度(使用可限定字符串的長(zhǎng)度(使用%ns%ns)遇到回車符結(jié)束遇到回車符結(jié)束遇到空格符或回車符結(jié)束遇到空格符或回車符結(jié)束putsputs函數(shù)函數(shù)格式:格式:puts(字符串地址字符串地址) 頭文件:頭文件:stdio.h 功能:向顯示器輸出字符串(輸出完,自動(dòng)換行)功能:向顯示器輸出字符串(輸出完,自動(dòng)換行)說(shuō)明:如果是字符數(shù)組,則必須以說(shuō)明:如果是字符數(shù)組,則必須以0結(jié)束結(jié)

18、束char str = I love china! ;puts (str);puts (I love Nanjin! ); 輸出結(jié)果輸出結(jié)果: I love china! I love Nanjin!printfprintf()()函數(shù)函數(shù)格式:格式:printf(%s, 字符串地址字符串地址) 功能:依次輸出字符串中的每個(gè)字符直到遇到字符功能:依次輸出字符串中的每個(gè)字符直到遇到字符0 (0不會(huì)被輸出)不會(huì)被輸出)說(shuō)明:說(shuō)明:(1 1)用用“%s”%s”格式符輸出字符串時(shí),格式符輸出字符串時(shí),printfprintf函數(shù)中的函數(shù)中的輸出項(xiàng)是字符數(shù)組名。輸出項(xiàng)是字符數(shù)組名。(2 2)如果數(shù)組長(zhǎng)度

19、大于字符串實(shí)際長(zhǎng)度,也只輸出到如果數(shù)組長(zhǎng)度大于字符串實(shí)際長(zhǎng)度,也只輸出到遇遇00結(jié)束。結(jié)束。(3 3)輸出字符不包括結(jié)束符輸出字符不包括結(jié)束符00。(4 4)如果一個(gè)字符數(shù)組中包含一個(gè)以上如果一個(gè)字符數(shù)組中包含一個(gè)以上00,則,則遇第一個(gè)遇第一個(gè)00時(shí)輸出就結(jié)束。時(shí)輸出就結(jié)束。 指針數(shù)組賦值與初始化指針數(shù)組賦值與初始化賦值賦值:main() int b23,*pb2; pb0=b0; pb1=b1; .int *pb2pb0pb1int b23123246 初始化初始化: main() int b23,*pb =b0,b1; . int *pb2pb0pb1int b23123246main(

20、) int b23,*pb2; int i,j; for(i=0;i2;i+) for(j=0;j3;j+) bij=(i+1)*(j+1); pb0=b0; pb1=b1; for(i=0;i2;i+) for(j=0;j3;j+,pbi+) printf(b%d%d:%2dn,i,j,*pbi);例例 用指針數(shù)組處理二維數(shù)組用指針數(shù)組處理二維數(shù)組int *pb2pb0pb1int b23b00 *pb0b01 *(pb0+1)b02 *(pb0+2)b10 *pb1b11 *(pb1+1)b12 *(pb1+2)123246例例 用二級(jí)指針處理字符串用二級(jí)指針處理字符串#define NU

21、LL 0void main() char *p; char *name=hello,good,world,bye,; p=name+1; printf(%o : %s , *p,*p); p+=2; while(*p!=NULL) printf(%sn,*p+);name0name1name2name3name4char *name5worldbye0hellogoodnamep運(yùn)行結(jié)果:運(yùn)行結(jié)果:644 : good bye用*p可輸出地址(%o或%x), 也可用它輸出字符串(%s)p*(p+)PascalBasicFortranJavaptr指針數(shù)組指針數(shù)組字符串字符串pVisual Cv

22、二級(jí)指針與指針數(shù)組的關(guān)系二級(jí)指針與指針數(shù)組的關(guān)系 int *p 與與 int *q10 l指針數(shù)組名是二級(jí)指針指針數(shù)組名是二級(jí)指針常量常量lp=q; p+i 是是qi的地址的地址l指針數(shù)組作形參,指針數(shù)組作形參,int *q 與與int *q完全等價(jià)完全等價(jià); 但但作為變量定義兩者不同作為變量定義兩者不同l系統(tǒng)只給系統(tǒng)只給p分配能保存一個(gè)指針值的內(nèi)存區(qū);而分配能保存一個(gè)指針值的內(nèi)存區(qū);而給給q分配分配10塊內(nèi)存區(qū),每塊可保存一個(gè)指針值塊內(nèi)存區(qū),每塊可保存一個(gè)指針值帶參數(shù)的帶參數(shù)的main函數(shù)和命令行參數(shù)函數(shù)和命令行參數(shù) 帶參帶參main函數(shù)的形式:函數(shù)的形式: main( int argc,c

23、har *argv )其中:其中: argc和指針數(shù)組和指針數(shù)組argv是兩個(gè)內(nèi)設(shè)參量是兩個(gè)內(nèi)設(shè)參量 argc 代表在命令行輸入的參數(shù)個(gè)數(shù),由于程代表在命令行輸入的參數(shù)個(gè)數(shù),由于程序名也計(jì)算在內(nèi),所以,序名也計(jì)算在內(nèi),所以, argc的值最小為的值最小為1 指針數(shù)組指針數(shù)組argv中的各元素依次指向用戶輸入中的各元素依次指向用戶輸入的各個(gè)命令行參數(shù)。的各個(gè)命令行參數(shù)。功能:將命令行參數(shù)傳遞給程序功能:將命令行參數(shù)傳遞給程序main(int argc,char *argv) if( argc!=3) printf(you forget to type the namen); else print

24、f(hello %s and %s n,argv1,argv2); 例:例: mymain.c可執(zhí)行文件名為可執(zhí)行文件名為mymain.exe,在命令行輸入:,在命令行輸入:mymain Tom Jerry屏幕上輸出結(jié)果為:屏幕上輸出結(jié)果為: hello Tom and Jerry 因此:因此:1. 所有的命令行參數(shù)都是字符串形式,各命令行所有的命令行參數(shù)都是字符串形式,各命令行參數(shù)之間必須用空格或制表符分隔,逗號(hào)和分參數(shù)之間必須用空格或制表符分隔,逗號(hào)和分號(hào)將視為有效字符。號(hào)將視為有效字符。上例上例 :若輸入:若輸入 mymain Tom,Jerry則顯示:則顯示: you forget t

25、o type the name若輸入若輸入 mymain Tom,Jerry Jeck則顯示:則顯示: hello Tom ,Jerry and Jeck2. argc 代表在命令行輸入的參數(shù)個(gè)數(shù),由于程代表在命令行輸入的參數(shù)個(gè)數(shù),由于程序名也計(jì)算在內(nèi),所以,序名也計(jì)算在內(nèi),所以, argc的值最小為的值最小為16.6 6.6 字符串的基本運(yùn)算字符串的基本運(yùn)算 字符類型判定函數(shù)(頭文件字符類型判定函數(shù)(頭文件 ctype.hctype.h)判斷字符的類型,如英文字母,數(shù)字,控制符,大小寫判斷字符的類型,如英文字母,數(shù)字,控制符,大小寫 字符串處理函數(shù)字符串處理函數(shù)( (頭文件頭文件 strin

26、g.hstring.h) )求字符串長(zhǎng)度,字符串復(fù)制、字符串拼接、字符串比較求字符串長(zhǎng)度,字符串復(fù)制、字符串拼接、字符串比較(3)(3)字符串與數(shù)字轉(zhuǎn)換函數(shù)字符串與數(shù)字轉(zhuǎn)換函數(shù)(stdlib.h(stdlib.h) )字符串轉(zhuǎn)換為整數(shù)、字符串轉(zhuǎn)換為浮點(diǎn)數(shù)字符串轉(zhuǎn)換為整數(shù)、字符串轉(zhuǎn)換為浮點(diǎn)數(shù)整數(shù)、浮點(diǎn)數(shù)等轉(zhuǎn)換為字符串等。整數(shù)、浮點(diǎn)數(shù)等轉(zhuǎn)換為字符串等。字符串處理函數(shù)字符串處理函數(shù)#include strcpy(目的字符串目的字符串,源字符串源字符串);string copystrlen(字符串字符串);string lengthstrcat(目的字符串目的字符串,源字符串源字符串);string

27、combinationstrcmp(字符串字符串1,字符串字符串2);string comparison1. 1.求字符串長(zhǎng)度求字符串長(zhǎng)度函數(shù)原型:函數(shù)原型:int strlen(const char s) 頭文件:頭文件:string.h 功能:計(jì)算字符串長(zhǎng)度功能:計(jì)算字符串長(zhǎng)度返回值:返回字符串實(shí)際長(zhǎng)度,不包括返回值:返回字符串實(shí)際長(zhǎng)度,不包括0在內(nèi)在內(nèi)char str10 = China;printf(%d, strlen(str);打印結(jié)果是打印結(jié)果是 5 5,6 6,還是,還是1010?不包括不包括00的實(shí)際字符的個(gè)數(shù)的實(shí)際字符的個(gè)數(shù)字符串操作的基本庫(kù)函數(shù)字符串操作的基本庫(kù)函數(shù)【例【

28、例6-76-7】( (strlenstrlen函數(shù)函數(shù)與與sizeofsizeof運(yùn)算符運(yùn)算符的比較的比較) )對(duì)照下面的程序及結(jié)果,分析原因。對(duì)照下面的程序及結(jié)果,分析原因。#include#includevoid main()char str1 = 0123456789;char str2 = A0BC0D;char str3 = 01230456789;char *str4 = 01230846759;printf (%4d, %4dn, strlen(str1),sizeof(str1); printf (%4d, %4dn, strlen(str2),sizeof(str2); pr

29、intf (%4d, %4dn, strlen(str3),sizeof(str3); printf (%4d, %4dn, strlen(str4),sizeof(str4); 運(yùn)行結(jié)果運(yùn)行結(jié)果 10, 11 1, 7 9, 10 4, 4/*045作為一個(gè)整體作為作為一個(gè)整體作為8進(jìn)制數(shù)對(duì)待進(jìn)制數(shù)對(duì)待*/ /*遇到結(jié)束符遇到結(jié)束符0,就結(jié)束,就結(jié)束*/ 2. 2.字符串復(fù)制字符串復(fù)制#include strcpy(目的字符串目的字符串,源字符串源字符串);字符串能否用字符串能否用= =整體復(fù)制?整體復(fù)制?str2 = str1;strcpy(str2, str1);注意復(fù)制的方向!注意復(fù)制

30、的方向!str2必須足夠大!必須足夠大!字符串復(fù)制字符串復(fù)制char str120, str220=China ,*str3;strcpy(str1, str2); strcpy(str3,str2); str3 = str2;char* strncpy(char* dest, const char* src,int n); 將字符串將字符串src的前的前n個(gè)字符復(fù)制到字符數(shù)組個(gè)字符復(fù)制到字符數(shù)組dest中去,中去,并在末尾加并在末尾加0 strncpy(str1, str2, 3); 3. 3.字符串比較字符串比較#include strcmp(字符串字符串1,字符串字符串2);字符串能否用

31、字符串能否用,=比較大小?比較大???if (str2 = str1)if (strcmp(str2, str1) = 0)字符串比較字符串比較#include strcmp(s1,s2);字符串是如何比較大小的?字符串是如何比較大小的?當(dāng)出現(xiàn)第一對(duì)不相等的字符時(shí),就當(dāng)出現(xiàn)第一對(duì)不相等的字符時(shí),就由這兩個(gè)字符決定所在字符串的大由這兩個(gè)字符決定所在字符串的大小,返回其小,返回其ASCIIASCII碼比較的結(jié)果值碼比較的結(jié)果值comparecomputerstrcmp(compare, computer)返回負(fù)整數(shù)返回負(fù)整數(shù)若若s1 s2, 返回正整數(shù)返回正整數(shù)若若s1 = s2, 返回零返回零co

32、mpare computer 表示為表示為strcmp(str1, str2) 0為真為真4. 4.字符串連接字符串連接#include strcat(目的字符串目的字符串,源字符串源字符串);strcat(str2, str1);str2必須足夠大!必須足夠大!5. 5.從字符串中查找字符從字符串中查找字符函數(shù)原型:函數(shù)原型:char* strchr(const char* s, int c);功能功能: 在字符串在字符串s中查找指定的字符中查找指定的字符c。返回值:返回值:如果字符如果字符c在串在串s中,返回一個(gè)指針,指向字中,返回一個(gè)指針,指向字符符c在串在串s中首次出現(xiàn)的位置。如果字符

33、中首次出現(xiàn)的位置。如果字符c不在不在s中,中,返回空指針。返回空指針。char* strrchr(const char* s, int c); 從從s所指字符串的最后一個(gè)字符起順序向前查找所指字符串的最后一個(gè)字符起順序向前查找 6. 6.從字符串中查找子串從字符串中查找子串函數(shù)原型:函數(shù)原型:char* strstr(const char* s1, const char* s2)功能:功能:從第一個(gè)參數(shù)從第一個(gè)參數(shù)s1所指字符串中第一個(gè)字符起,順?biāo)缸址械谝粋€(gè)字符起,順序向后查找出與第二個(gè)參數(shù)序向后查找出與第二個(gè)參數(shù)s2所指字符串相同的子串,所指字符串相同的子串,若查找成功則返回該子串的首

34、地址,否則返回若查找成功則返回該子串的首地址,否則返回NULL。 char a20=abcdabxcdabxy;char b4=abx;char c4=axy;printf(“%sn”,strstr(a,b);if(strstr(a,c)=NULL) printf(“Not found!n);printf(“%sn”,strstr(學(xué)習(xí)文化知識(shí)學(xué)習(xí)文化知識(shí),文化文化); 運(yùn)行結(jié)果運(yùn)行結(jié)果abxcdabxyNot found!文化知識(shí)文化知識(shí)7. 7.整數(shù)轉(zhuǎn)換成字符串整數(shù)轉(zhuǎn)換成字符串函數(shù)原型:函數(shù)原型:char *itoa(int value, char *str, int radix);參數(shù):

35、參數(shù):value 要轉(zhuǎn)化的數(shù)值,要轉(zhuǎn)化的數(shù)值,radix 轉(zhuǎn)換的進(jìn)制,如轉(zhuǎn)換的進(jìn)制,如10表表示按十進(jìn)制轉(zhuǎn)換,示按十進(jìn)制轉(zhuǎn)換,str保存轉(zhuǎn)換后的字符串。保存轉(zhuǎn)換后的字符串。返回值:返回值:返回指向返回指向str的指針。的指針。#include 字符串轉(zhuǎn)換成整數(shù)字符串轉(zhuǎn)換成整數(shù)函數(shù)原型:函數(shù)原型: int atoi(char *str);參數(shù):參數(shù):str為待轉(zhuǎn)換的字符串,為待轉(zhuǎn)換的字符串,str必須是數(shù)字必須是數(shù)字組成的字符串,如組成的字符串,如“235”等。等。返回值:返回值:轉(zhuǎn)換后的整數(shù)。轉(zhuǎn)換后的整數(shù)。 #include 字符串逆置字符串逆置數(shù)制轉(zhuǎn)換數(shù)制轉(zhuǎn)換字符串排序字符串排序整數(shù)轉(zhuǎn)換成字

36、符串整數(shù)轉(zhuǎn)換成字符串單詞分離單詞分離6.7 6.7 字符串應(yīng)用舉例字符串應(yīng)用舉例字符串逆置字符串逆置對(duì)于給定的字符串對(duì)于給定的字符串s,將其逆序,即如果將其逆序,即如果s=”abcdef”,則逆,則逆序后的字符串是序后的字符串是s=”fedcba”算法算法1:數(shù)組方式實(shí)現(xiàn):數(shù)組方式實(shí)現(xiàn)void str_reverse(char *s) char t; int low=0,high; high=strlen(s)-1; while(lowhigh) t=slow; slow=shigh; shigh=t; low+; high-; 算法算法2:指針方式實(shí)現(xiàn):指針方式實(shí)現(xiàn)void str_reve

37、rse(char *s) char *p,*q,t; int n; n=strlen(s); p=s; q=&sn-1; while(pq) t=*p; *p=*q; *q=t; p+; q-; Ba0427 MOD 16 = B 427 16 =2626 MOD 16 = A26 16= 1A a11 a2 1 MOD 16 = 11 16 = 0C0C1C2C3C4C5C6C7C8C9C10C11C12C13C14C15S0S1S2S3S4S5S6S7S8S9S10S11S12S13S14S1516427261010111(427)10=(1AB)1616BA116數(shù)制轉(zhuǎn)換數(shù)制轉(zhuǎn)換把一個(gè)十

38、進(jìn)制整數(shù)轉(zhuǎn)換為對(duì)應(yīng)的十六進(jìn)制數(shù)字把一個(gè)十進(jìn)制整數(shù)轉(zhuǎn)換為對(duì)應(yīng)的十六進(jìn)制數(shù)字符串輸出。符串輸出。 此函數(shù)用于把十進(jìn)制整數(shù)此函數(shù)用于把十進(jìn)制整數(shù)x x轉(zhuǎn)換為十六進(jìn)制數(shù)字符串輸出轉(zhuǎn)換為十六進(jìn)制數(shù)字符串輸出char *dec2hex(int x,char a ) int i=0,rem; do rem=x%16;x=x/16;if(rem10) ai=48+rem; /0字符的字符的ASCII碼為碼為48else ai=55+rem; /A字符的字符的ASCII碼為碼為65i+;while(x!=0);ai=0; /字符串結(jié)束標(biāo)記字符串結(jié)束標(biāo)記str_reverse(a); /倒序輸出,倒序輸出,調(diào)用調(diào)

39、用串逆置函數(shù)串逆置函數(shù) return a;void main(void)char *str=Follow me,BASIC,Great wall,FORTRAN , Computer ; char *p; int i,j,k;for(i=0;i4;i+) k=i;for(j=i+1;j0)k=j;if(k!=i) p=strk; strk = stri; stri=p; for(i=0;i5;i+)printf(%s n,stri); 例:將若干個(gè)字符串升序排序后輸出例:將若干個(gè)字符串升序排序后輸出例例 對(duì)字符串排序(簡(jiǎn)單選擇排序)對(duì)字符串排序(簡(jiǎn)單選擇排序)#include #include

40、 main() void sort(char *name,int n); void print(char *name,int n); char *name=Follow me,BASIC, Great Wall,FORTRAN,Computer ; int n=5; sort(name,n); print(name,n);void sort(char *name,int n) char *temp; int i,j,k; for(i=0;in-1;i+) k=i; for(j=i+1;j0) k=j; if(k!=i) temp=namei; namei=namek; namek=temp;

41、name0name1name2name3name4nameGreat WallFORTRANComputerFollow meBASICkjkjjji=0例例 對(duì)字符串排序(簡(jiǎn)單選擇排序)對(duì)字符串排序(簡(jiǎn)單選擇排序)namename0name1name2name3name4Great WallFORTRANComputerFollow meBASICkkjjji=1k#include #include main() void sort(char *name,int n); void print(char *name,int n); char *name=Follow me,BASIC, Gre

42、at Wall,FORTRAN,Computer ; int n=5; sort(name,n); print(name,n);void sort(char *name,int n) char *temp; int i,j,k; for(i=0;in-1;i+) k=i; for(j=i+1;j0) k=j; if(k!=i) temp=namei; namei=namek; namek=temp; 例例 對(duì)字符串排序(簡(jiǎn)單選擇排序)對(duì)字符串排序(簡(jiǎn)單選擇排序)namename0name1name2name3name4Great WallFORTRANComputerFollow meBASI

43、Ckkjji=2#include #include main() void sort(char *name,int n); void print(char *name,int n); char *name=Follow me,BASIC, Great Wall,FORTRAN,Computer ; int n=5; sort(name,n); print(name,n);void sort(char *name,int n) char *temp; int i,j,k; for(i=0;in-1;i+) k=i; for(j=i+1;j0) k=j; if(k!=i) temp=namei;

44、namei=namek; namek=temp; 例例 對(duì)字符串排序(簡(jiǎn)單選擇排序)對(duì)字符串排序(簡(jiǎn)單選擇排序)namename0name1name2name3name4Great WallFORTRANComputerFollow meBASICi=3kjk#include #include main() void sort(char *name,int n); void print(char *name,int n); char *name=Follow me,BASIC, Great Wall,FORTRAN,Computer ; int n=5; sort(name,n); print

45、(name,n);void sort(char *name,int n) char *temp; int i,j,k; for(i=0;in-1;i+) k=i; for(j=i+1;j0) k=j; if(k!=i) temp=namei; namei=namek; namek=temp; name0name1name2name3name4void print(char *name ,int n) int i; char *p; p = name; for (i=0; in; i+) printf(%sn, *p); p+; 例例 對(duì)字符串排序(簡(jiǎn)單選擇排序)對(duì)字符串排序(簡(jiǎn)單選擇排序)char *Int2Str(int x,char *istr) char sign,ch; char *p,*t; int r; p=t=istr; if(x0) r=x%10; x=x/10; *p+=48+r;/*數(shù)字?jǐn)?shù)字0的的ascII碼值碼值 */ 整數(shù)轉(zhuǎn)換成字符串整數(shù)轉(zhuǎn)換成字符串 if(sign=-) *p+=-; *p=0; p-; while(tp) /*將將p中的數(shù)字符串倒序排列中的數(shù)字符串倒序排列 */

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論