《C語言程序設(shè)計(jì):從計(jì)算思維到項(xiàng)目驅(qū)動(dòng)(微課視頻版)》課件 第7章 字符串_第1頁
《C語言程序設(shè)計(jì):從計(jì)算思維到項(xiàng)目驅(qū)動(dòng)(微課視頻版)》課件 第7章 字符串_第2頁
《C語言程序設(shè)計(jì):從計(jì)算思維到項(xiàng)目驅(qū)動(dòng)(微課視頻版)》課件 第7章 字符串_第3頁
《C語言程序設(shè)計(jì):從計(jì)算思維到項(xiàng)目驅(qū)動(dòng)(微課視頻版)》課件 第7章 字符串_第4頁
《C語言程序設(shè)計(jì):從計(jì)算思維到項(xiàng)目驅(qū)動(dòng)(微課視頻版)》課件 第7章 字符串_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第7章字符串字符與字符串字符常量是由一對單引號(hào)括起來的一個(gè)字符,按其對應(yīng)的ASCII碼值存儲(chǔ),占一個(gè)字節(jié)。字符常量又分為一般字符常量和轉(zhuǎn)義字符。1.一般字符常量一般字符常量是用單引號(hào)括起來的一個(gè)普通字符,其值為該字符的ASCII值。如’a’、’A’、’0’、’?’2.轉(zhuǎn)義字符以反斜杠(\)開頭的特定字符序列,是表示字符的一種特殊形式。轉(zhuǎn)義字符表示不可打印字符或具有特定用途的字符。如’\n’表示回車換行符,’\\’表示字符“\”。字符與字符串3.字符串字符串也被稱為字符串常量,是由一對雙引號(hào)括起來(“”)的一串字符。雙引號(hào)中可以是一個(gè)字符,也可以是多個(gè)字符。在C語言中每個(gè)字符串末尾系統(tǒng)都會(huì)自動(dòng)加上一個(gè)特殊字符‘\0’(ASCII碼值為0)作為字符串的結(jié)束標(biāo)志。如下圖所示,字符和字符串的存儲(chǔ)方式有所不同。‘a(chǎn)’的存儲(chǔ)只占用一個(gè)字節(jié),而“a”要占用2個(gè)字節(jié),第一個(gè)字節(jié)存放‘a(chǎn)’,第二個(gè)字節(jié)存放‘\0’作為字符串結(jié)束標(biāo)志。用數(shù)組實(shí)現(xiàn)的字符串在C語言中沒有專門的字符串類型,字符串是通過字符數(shù)組來表達(dá)的。字符數(shù)組中的每個(gè)元素為一個(gè)字符,數(shù)組的最后一個(gè)元素必須是'\0'才表示字符串,否則就是一個(gè)普通的字符數(shù)組。字符串結(jié)束符'\0'在內(nèi)存中占用一個(gè)字節(jié)的空間,但是他不計(jì)入字符串的長度,只計(jì)入數(shù)組的長度。用數(shù)組實(shí)現(xiàn)的字符串字符數(shù)組的初始化有如下幾種方式:1.使用字符常量初始化列表進(jìn)行初始化:charstring[6]={‘h’,’e’,’l’,’l’,’o’,'\0’};2.逐個(gè)元素賦值:charstring[6];string[0]=‘h’;string[1]=‘e’;string[2]=‘l’;string[3]=‘l’;string[4]=‘o’;string[5]=‘\0’;用數(shù)組實(shí)現(xiàn)的字符串3.用字符串常量進(jìn)行初始化:charstring[10]=“hello”;charstring[10]={“hello”};charstring[]=“hello”//系統(tǒng)自動(dòng)為string分配包含'\0'在內(nèi)的6個(gè)字節(jié)的空間用數(shù)組實(shí)現(xiàn)的字符串4.字符串與字符數(shù)組的區(qū)別如下:存儲(chǔ)格式:字符串必須具有結(jié)束標(biāo)志’\0’,而字符數(shù)組中不一定有’\0’字符。輸入輸出方式:通過printf進(jìn)行輸出時(shí),字符串輸出使用%s格式,字符輸出使用%c。字符串指針當(dāng)一個(gè)字符類型的指針指向一個(gè)字符串,就成為了一個(gè)字符串指針。使用一個(gè)字符串指針可以完成對該字符串的操作,如輸出該字符串。如圖所示,讓字符指針指向一個(gè)字符串常量,字符指針就是指向字符串首地址的指針。char*pStr="hello";字符串指針1.字符指針與字符數(shù)組char*pStr=“helloworld!”;charstring[]=“helloworld!”;字符指針pStr是一個(gè)變量,可以改變pStr使它指向不同的字符串,但不能改變pStr所指的字符串常量。字符數(shù)組string是一個(gè)數(shù)組,可以改變數(shù)組中保存的內(nèi)容,但不能改變string的值(不能向string賦值)。字符串指針2.字符指針和字符數(shù)組的區(qū)別含義不同:字符數(shù)組由若干個(gè)元素組成,而字符指針變量中存放的是字符串的首地址。賦值方式不同:對字符數(shù)組不能整體賦值,只能對單個(gè)元素進(jìn)行。而字符指針變量賦值可整體進(jìn)行。在定義一個(gè)字符數(shù)組時(shí),編譯時(shí)分配內(nèi)存單元,有確定的地址。而定義一個(gè)字符指針變量時(shí),給指針變量分配內(nèi)存單元,但該指針變量具體指向哪個(gè)字符串,并不知道,即指針變量存放的地址不確定。字符指針變量的值可以改變,字符數(shù)組名是一個(gè)常量,不能改變。char*pStr;與charstring[20];str由若干元素組成,每個(gè)元素放一個(gè)字符;而cp中存放字符串首地址charstring[20];string=“helloworld!”;()char*pStr;pStr=“helloworld!”;()string是地址常量;pStr是地址變量字符串的輸入/輸出以下幾種方式都可以實(shí)現(xiàn)字符串的輸入/輸出。1.按字符逐個(gè)輸出【例7.1】按字符逐個(gè)輸出字符串程序1charstring[10];2for(i=0;string[i]!='\0';i++)3{4putchar(string[i]);5}6putchar('\n');字符串的輸入/輸出2.用printf和scanf按%s格式符來進(jìn)行輸入輸出這種方式下字符串作為一個(gè)整體輸入/輸出。scanf(“%s”,str);讀入一個(gè)字符串,直到遇到空白字符(空格、回車、制表符)為止,因此用這種方式不能輸入帶空格的字符串。printf(“%s”,str);輸出一個(gè)字符串,直到遇到字符串結(jié)束標(biāo)志為止。字符串的輸入/輸出【例7.2】用printf和scanf按%s格式符來進(jìn)行輸入輸出程序1#include<stdio.h>2main()3{4myfunc();5}67myfunc()8{9charstring[100];//定義一個(gè)較大的字符數(shù)組用來存儲(chǔ)字符串1011printf("Inputastring:\n");12scanf("%s",string);1314printf("thestringis:\n");15printf("%s",string);16}

字符串的輸入/輸出3.用gets和puts來進(jìn)行輸入輸出一般形式為:gets(字符數(shù)組名)作用是從終端輸入一個(gè)字符串到字符數(shù)組。比如gets(word);用于從鍵盤輸入一個(gè)字符串,存儲(chǔ)到word數(shù)組中,該字符串由換行符以前的所有字符組成(包括空白和制表符),系統(tǒng)也會(huì)自動(dòng)為這個(gè)字符串加上‘\0’結(jié)束標(biāo)志。字符串的輸入/輸出【例7.3】用gets和puts來進(jìn)行輸入輸出程序1#include<stdio.h>2intmain()3{4myfunc();5return0;6}78myfunc()9{10charstring[100];//定義一個(gè)較大的字符數(shù)組用來存儲(chǔ)字符串1112printf("Inputastring:\n");13gets(string);1415printf("thestringis:\n");16puts(string);17}字符串的輸入/輸出4.

gets和scanf輸入字符串時(shí)的差別gets能夠輸入帶空格的字符串,到回車字符為止,同時(shí)將回車從緩沖區(qū)讀走,但不作為字符串的一部分;scanf一般接收到空格或回車為止,不讀走回車,回車仍留在緩沖區(qū)中,回車可以被后繼的getchar()讀走。遇上其中之一即停止。所以,不能輸入帶空格的字符串。字符串的輸入/輸出5.

puts和printf輸出字符串的差別puts(字符數(shù)組名);其作用是將一個(gè)字符串輸出到終端,并在輸出時(shí)將字符串結(jié)束標(biāo)記'\0'轉(zhuǎn)換則'\n',即輸出完字符串后換行。也就是說puts在輸出字符串時(shí),遇到’\0’會(huì)自動(dòng)終止輸出,并且將’\0’轉(zhuǎn)換為’\n’來輸出。而printf在輸出字符串時(shí),遇到’\0’只是終止輸出,并不會(huì)將’\0’轉(zhuǎn)換為’\n’來輸出。字符串處理函數(shù)函數(shù)功能函數(shù)調(diào)用的一般形式功能描述求字符串長度strlen(str);由函數(shù)值返回字符串str的實(shí)際長度,即不包括’\0’在內(nèi)的實(shí)際字符的長度字符串拷貝strcpy(str1,str2);將字符串str2復(fù)制到字符數(shù)組strl中,這里應(yīng)確保字符數(shù)組strl的大小足以存放得下字符串str2字符串比較strcmp(str1,str2);比較字符串str1和字符串str2的大小,結(jié)果分為3種情況:·當(dāng)str1大于str2時(shí),函數(shù)返回值大于0·當(dāng)str1等于str2時(shí),函數(shù)返回值等于0··當(dāng)str1小于str2時(shí),函數(shù)返回值小于0字符串的比較方法為:對兩個(gè)字符串從左至右按字符的ASCI碼值大小逐個(gè)字符相比較,直到出現(xiàn)不同的字符或遇到0為止。字符串連接strcat(str1,str2);將字符串str2添加到字符串str1的末尾,字符串str1中的字符串結(jié)束符被字符串str2的第一個(gè)字符覆蓋,連接后的字符串存放在字符數(shù)組str1中,函數(shù)調(diào)用后返回字符串str1的首地址。這里,字符數(shù)組str1應(yīng)定義得足夠大,以便能存放連接后的字符串。字符串處理函數(shù)1.計(jì)算字符串長度函數(shù):strlen()語法形式:strlen(str);/*str為已定義好的字符數(shù)組*/功能:求字符串str的有效元素的個(gè)數(shù),不包括’\0’在內(nèi)需要注意字符串長度與數(shù)組長度(為100)的區(qū)別。1charstr[100]="study";2intlength;3length=strlen(str);4printf("%d,%d",length,sizeof(str));程序運(yùn)行結(jié)果如下:5,100字符串處理函數(shù)2.字符串連接函數(shù):strcat()語法形式:strcat(strSource,strTarget);/*strSource和strTarget為已定義好的兩個(gè)字符數(shù)組*/功能:將字符串strTarget連接到strSource字符串的尾部,并在新串末尾自動(dòng)添加’\0’。1charstrSource[20]="hello";2charstrTarget[20]="world!";3strcat(strSource,strTarget);4puts(strSource);程序運(yùn)行結(jié)果如下:helloworld!字符串處理函數(shù)3.字符串比較函數(shù):strcmp()語法形式:strcmp(str1,str2);/*str1和str2為已定義好的兩個(gè)字符數(shù)組*/功能:將str1與str2進(jìn)行比較(將兩字符串的字符從左到右逐個(gè)進(jìn)行比較,當(dāng)出現(xiàn)第一對不相等的字符時(shí),就由這兩個(gè)字符決定所在字符串的大小,返回其ASCII碼比較的結(jié)果值),若str1大于str2,則返回正值,若str1與str2相等,則返回0,若str1小于str2,則返回負(fù)值。1intresult;2charstr1[20]="study";3charstr2[20]="student";45result=strcmp(str1,str2);6printf("result=%d",result);程序運(yùn)行結(jié)果如下:result=1字符串處理函數(shù)4.字符串拷貝函數(shù):strcpy()語法形式:strcpy(strSource,strTarget);//strSource和strTarget為已定義好的兩個(gè)字符數(shù)組功能:將字符串strTarget拷貝到strSource字符串中。1charstrSource[100]="study";2charstrTarget[20]="CLanguage";3strcpy(strSource,strTarget);4puts(strSource);程序運(yùn)行結(jié)果如下:CLanguage向函數(shù)傳遞字符串字符數(shù)組和字符指針都可以存取字符串。所以,向函數(shù)傳遞字符串時(shí),既可以使用字符數(shù)組也可以使用字符串指針作為函數(shù)參數(shù)。1.字符串指針作為函數(shù)參數(shù)如例所示,以字符串指針作函數(shù)參數(shù),自定義函數(shù)實(shí)現(xiàn)字符串的復(fù)制功能(不調(diào)用strcpy函數(shù))?!纠?.4】字符串指針作函數(shù)參數(shù)程序1#include<stdio.h>2#include<string.h>34voidcopy_string(char*from,char*to)5{6for(;*from!='\0';)7*to++

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論