C語言開發(fā)基礎(chǔ)教程第7章-字符串-教學(xué)PPT_課件_第1頁
C語言開發(fā)基礎(chǔ)教程第7章-字符串-教學(xué)PPT_課件_第2頁
C語言開發(fā)基礎(chǔ)教程第7章-字符串-教學(xué)PPT_課件_第3頁
C語言開發(fā)基礎(chǔ)教程第7章-字符串-教學(xué)PPT_課件_第4頁
C語言開發(fā)基礎(chǔ)教程第7章-字符串-教學(xué)PPT_課件_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第7章 字符串 字符串操作函數(shù) 數(shù)字與字符串轉(zhuǎn)換 階段案例字符數(shù)組與字符串 字符串指針 字符串的輸入輸出7.1 字符數(shù)組和字符串字符數(shù)組是由字符類型的元素所組成的數(shù)組,字符串就存儲在字符數(shù)組中,在訪問字符數(shù)組時,可使用下標(biāo)法讀取指定位置的字符,也可使用%s格式將字符數(shù)組中的元素以字符串的形式全部輸出。7.1.1 字符數(shù)組字符數(shù)組定義方式與整型數(shù)組類似:char 數(shù)組名數(shù)組大小; /一維字符數(shù)組例如,定義字符數(shù)組:char ch6;char c5=h,e,l,l,o;訪問字符數(shù)組中的元素c0; /第1個元素c1; /第2個元素c2; /第3個元素腳下留心:字符數(shù)組初始化時注意事項字符數(shù)組的初始化

2、很簡單,但是要注意以下幾點:(1)初始項不能多于字符數(shù)組的大小,否則編繹器會報錯。char str2 = a, b, c; /錯誤寫法(2)如果初始項值少于數(shù)組長度,則空余元素均會被賦值為空字符(0)。char str5 = a, b, c; /后面剩余的兩個元素均被賦值為0腳下留心:字符數(shù)組初始化時注意事項字符數(shù)組的初始化很簡單,但是要注意以下幾點:(3)如果沒有指定數(shù)組大小,則編繹器會根據(jù)初始項的個數(shù)為數(shù)組分配長度。char str = a, b, c; /與char str3 = a, b, c;相同(4)二維字符數(shù)組的初始化與整型二維數(shù)組類似。char str22 = a, b, c,

3、 d;7.1.2 字符串字符串是由數(shù)字、字母、下劃線、空格等各種字符組成的一串字符,由一對英文半角狀態(tài)下的雙引號(“”)括起來?!癮bcde“ /字符串“ “ /字符串7.1.2 字符串字符串在末尾都默認(rèn)有一個0作為結(jié)束符。注 意7.1.2 字符串在C語言中,字符串的存儲和處理都是通過字符數(shù)組來實現(xiàn)的,存儲字符串的字符數(shù)組必須以空字符0(空字符)結(jié)尾。當(dāng)把一個字符串存入一個字符數(shù)組時,也把結(jié)束符0存入數(shù)組,因此該字符數(shù)組的長度是字符串實際字符數(shù)加1。7.1.2 字符串字符串由字符數(shù)組進(jìn)行存儲,那么可以直接使用一個字符串常量來為一個字符數(shù)組賦值。char char_array6 = hello;

4、char char_array = hello;上述兩個字符數(shù)組的大小都是6,這是因為字符串末尾有一個0結(jié)束符。它們等同于下面數(shù)組的定義:char char_array6 = h, e, l, l, o, 0;7.1.2 字符串 小提示:0字符字符串其實就是一個以空字符0結(jié)尾的字符數(shù)組,在定義存儲字符串的數(shù)組時,要手動在數(shù)組末尾加上0,或者直接使用字符串對數(shù)組進(jìn)行初始化。7.1.2 字符串字符數(shù)組的輸出:字符數(shù)組可以通過%s格式化輸出,直接輸出數(shù)組名。char char_array6 = hello;printf(%s, char_array); /結(jié)果為hello7.1.2 字符串獲取字符串

5、的長度:C語言中的strlen()函數(shù)獲取字符串的長度:unsigned int strlen(char *s);示例代碼如下:strlen(hello); /獲取字符串hello的長度strlen(char_array); /獲取字符數(shù)組char_array中存儲的字符串的長度7.1.2 字符串使用strlen()函數(shù)得到的字符串的長度并不包括末尾的空字符0。注 意7.1.2 字符串 小提示:strlen()函數(shù)與sizeof運算符(1)sizeof是運算符;strlen()是C語言標(biāo)準(zhǔn)庫函數(shù),包含在string.h頭文件中。(2)sizeof運算符功能是獲得所建立的對象的字節(jié)大小,計算的是

6、類型所占內(nèi)存的多少;strlen()函數(shù)是獲得字符串所占內(nèi)存的有效字節(jié)數(shù)。7.1.2 字符串 小提示:strlen()函數(shù)與sizeof運算符(3)sizeof運算符的參數(shù)可以是數(shù)組、指針、類型、對象、函數(shù)等;strlen()函數(shù)的參數(shù)是字符串或以0結(jié)尾的字符數(shù)組。(4)sizeof運算符計算大小是在編繹時就完成,因此不能用來計算動態(tài)分配內(nèi)存的大小;strlen()結(jié)果要在運行時才能計算出來。7.1.3 字符串與指針在C語言中,字符型指針用char*來定義,它不僅可以指向一個字符型常量,還可以指向一個字符串。字符串使用字符數(shù)組進(jìn)行存儲,因此,指針字符串的指針其實是指向了存儲字符串的數(shù)組。字符串

7、與指針7.1.3 字符串與指針char arr6 = nihao; /定義一個字符數(shù)組arr,存儲字符串nihaochar *p = arr; /定義一個字符型指針p,指向數(shù)組arr字符指針p指向字符串a(chǎn)rr,它們之間的邏輯關(guān)系如下圖。7.1.3 字符串與指針通過字符指針引用字符數(shù)組中的元素:(1)下標(biāo)法:p1; (2)指針運算:*(p+1); 7.1.3 字符串與指針當(dāng)字符指針指向字符串時,如果以%s格式化輸出,則直接輸出字符串;如果以%d等整型格式化輸出,則輸出的是字符串所在空間的首地址。printf(“%s”, char_array); /輸出字符數(shù)組char_array中的字符串pri

8、ntf(“%d”, char_array); /輸出字符數(shù)組char_array的地址7.1.3 字符串與指針當(dāng)定義指向字符串的指針時,除了使用數(shù)組為指針初始化,還可以使用字符串直接給指針進(jìn)行初始化。char *p1 = nihao; 7.1.3 字符串與指針在用字符數(shù)組初始化字符指針之前,字符串已經(jīng)存在于字符數(shù)組在棧區(qū)開辟的內(nèi)存空間中,字符指針只需存儲字符數(shù)組的地址即可;而用字符串常量初始化字符指針時,系統(tǒng)會先將字符串常量放入常量區(qū),再用指針變量存儲字符串的首地址。7.1.3 字符串與指針使用字符數(shù)組與字符串初始化字符指針的區(qū)別。7.1.3 字符串與指針字符指針與字符數(shù)組在初始化、賦值等方面

9、的不同。(1)初始化:可以對字符指針進(jìn)行賦值,但不能對數(shù)組名進(jìn)行賦值。(2)賦值方式:字符數(shù)組(或字符串)之間只能單個元素賦值或使用復(fù)制函數(shù);字符指針則無此限制。(3)運算:字符指針可以通過指針運算改變其值,而數(shù)組名是一個指針常量,其值不可以改變。(4)字符串中字符的引用:數(shù)組可以用下標(biāo)法和指針運算引用數(shù)組元素;字符串也可以用這兩種方法來引用字符串的字符元素。7.2.1 常見的輸入函數(shù)1、getc()函數(shù)getc()函數(shù)用來讀取用戶輸入的單個字符,其函數(shù)聲明如下:int getc(FILE *stream);getc()函數(shù)接收一個文件指針作為參數(shù),它可以從該文件指針中讀取一個字符,然后將字符

10、強制轉(zhuǎn)換為int類型返回,當(dāng)讀取到末尾或發(fā)生錯誤時返回EOF(-1)。7.2.1 常見的輸入函數(shù)2、getchar()函數(shù)getchar()函數(shù)用于從標(biāo)準(zhǔn)輸入中讀取一個字符,其函數(shù)聲明如下:int getchar(void);getchar()沒有參數(shù),可直接使用,其返回值為讀取到的字符。7.2.1 常見的輸入函數(shù)3、gets()函數(shù)gets()函數(shù)用于讀取一個字符串,其函數(shù)聲明如下:char *gets(char *str);gets()函數(shù)讀取換行符之前的所有字符(不包括換行符本身),并在字符串的末尾添加一個空字符0用來標(biāo)記字符串的結(jié)束,讀取到的字符串會以指針形式返回。7.2.1 常見的輸

11、入函數(shù)使用gets()函數(shù)時,用戶定義的字符數(shù)組的長度必須大于用戶輸入的字符串長度,否則程序會發(fā)生“緩沖區(qū)溢出”錯誤。注 意7.2.2 常見的輸出函數(shù)1、putc()函數(shù)putc()函數(shù)用于將一個字符輸出到指定流中,其函數(shù)聲明如下:int putc(int char, FILE *fp);putc()函數(shù)接收兩個參數(shù):字符和文件指針,其返回值是一個整型數(shù)據(jù),它將輸出的字符以整型數(shù)據(jù)的形式返回。7.2.2 常見的輸出函數(shù)2、putchar()函數(shù)putchar()函數(shù)用于將一個字符輸出到標(biāo)準(zhǔn)輸出,其函數(shù)聲明如下:int putchar(int char);putchar()函數(shù)接收一個字符參數(shù),

12、它將這個字符輸出到標(biāo)準(zhǔn)輸出,然后返回該字符。7.2.2 常見的輸出函數(shù)3、puts函數(shù)puts()函數(shù)用來輸出一整行字符串,其函數(shù)聲明如下:int puts(const char *str);puts()接收的參數(shù)是一個字符串指針,該指針指向要輸出的字符串,并且會自動在字符串末尾追加換行符n。如果調(diào)用成功,則返回一個int類型的正數(shù),否則返回EOF。7.2.2 常見的輸出函數(shù) 小提示:printf()與puts()的區(qū)別與puts()函數(shù)相比,printf()函數(shù)不會一次輸出一整行字符串,而是根據(jù)格式化字符串輸出一個個“單詞”。由于進(jìn)行了額外的數(shù)據(jù)格式化工作,在性能上,printf()比put

13、s()慢。但另一方面,printf()還可以直接輸出各種不同類型的數(shù)據(jù),因此它比puts()使用的更廣泛。7.3.1 字符串比較函數(shù)1、strcmp()函數(shù)strcmp()函數(shù)用于比較兩個字符串的內(nèi)容是否相等:int strcmp(const char *str1, const char *str2);參數(shù)str1和str2代表要進(jìn)行比較的兩個字符串。如果兩個字符串的內(nèi)容相同,strcmp()返回0,否則返回非零值。7.3.1 字符串比較函數(shù)函數(shù)strcmp()只能接收字符指針作為參數(shù),不接收單個字符;如果傳入的是某個字符(如a),那么a會被視為指針,程序?qū)箦e。注 意7.3.1 字符串比較

14、函數(shù)2、strncmp()函數(shù)strncmp()函數(shù)用來比較兩個字符串中前n個字符是否完全一致。:int strncmp(const char *str1, const char *str2, size_t n);參數(shù)n表示要比較的字符個數(shù)。當(dāng)然,如果字符串str1和str2的長度都小于n,那么就相當(dāng)于使用strcmp()函數(shù)對字符串進(jìn)行比較。7.3.2 字符串查找函數(shù)1、strchr()函數(shù)strchr()函數(shù)用來查找指定字符在指定字符串中第1次出現(xiàn)的位置。char *strchr(const char *str, char c);參數(shù)str為被查找的字符串,c是指定的字符。如果字符串str

15、中包含字符c,strchr()函數(shù)將返回一個字符指針,該指針指向字符c第1次出現(xiàn)的位置,否則返回空指針。7.3.2 字符串查找函數(shù)2、strrstr()函數(shù)strrchr()函數(shù)用來查找指定字符在指定的字符串中最后1次出現(xiàn)的位置。char *strrchr(const char *str, char c);參數(shù)str為被查找的字符串,c是指定的字符。如果字符串str中包含字符c,strchr()函數(shù)將返回一個字符指針,該指針指向字符c最后一次出現(xiàn)的位置,否則返回空指針。7.3.2 字符串查找函數(shù)3、strstr()函數(shù)strstr()判斷在字符串中是否包含指定子串。char *strstr(c

16、onst char *haystack, const char *needle);參數(shù)haystack是被查找的字符串,needle是子字符串。如果在字符串haystack中找到了字符串needle,則返回子字符串的指針,否則返回空指針。7.3.3 字符串連接函數(shù)1、strcat()函數(shù)strcat()函數(shù)用來實現(xiàn)字符串的連接。char *strcat(char *dest, const char *src);參數(shù)dest為目標(biāo)字符串,參數(shù)src接收源字符串,strcat()將參數(shù)src指向的字符串復(fù)制到參數(shù)dest所指字符串的尾部,覆蓋dest所指字符串的結(jié)束字符,實現(xiàn)拼接。7.3.3 字符

17、串連接函數(shù)當(dāng)調(diào)strcat()函數(shù)時,第1個參數(shù)必須有足夠空間在存儲連接進(jìn)來的字符串,否則會產(chǎn)生緩沖區(qū)溢出問題。注 意7.3.3 字符串連接函數(shù)2、strncat()函數(shù)strncat()函數(shù)用于連接指定長度的字符串。char *strncat(char *dest, const char *src, size_t n);該函數(shù)用于設(shè)置從src所指字符數(shù)組中取出的字符個數(shù)。7.3.4 字符串復(fù)制函數(shù)strcpy()函數(shù)strcpy()函數(shù)用于實現(xiàn)字符串復(fù)制功能。char *strcpy(char *dest, const char *src);strcpy()函數(shù)接受兩個參數(shù),其功能是把從sr

18、c地址開始且含有0結(jié)束符的字符串復(fù)制到以dest開始的地址空間,返回指向dest的指針。7.3.4 字符串復(fù)制函數(shù)src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來容納src的字符串。注 意7.3.4 字符串復(fù)制函數(shù)strcpy()函數(shù)用法:char arr15 = hello,China;char *p = ABCD;strcpy(arr,p);這段代碼的復(fù)制過程如右圖。7.4 數(shù)字與字符串的轉(zhuǎn)換1、atoi()函數(shù)atoi()函數(shù)用于將一個數(shù)字字符串轉(zhuǎn)換為對應(yīng)的十進(jìn)制數(shù)。int atoi(const char *str);參數(shù)str用于接收記錄數(shù)字的字符串,若函數(shù)調(diào)用成功,

19、將返回轉(zhuǎn)換后的十進(jìn)制整數(shù);否則返回0。需要注意的是,atoi()的聲明位于stdlib.h文件中,因此需要使用include指令引用頭文件stdlib.h。7.4 數(shù)字與字符串的轉(zhuǎn)換2、atof()函數(shù)atof()函數(shù)用于將一個數(shù)字字符串轉(zhuǎn)換為浮點數(shù)。double atof(const char *str);參數(shù)str用于接受記錄數(shù)字的字符串,若函數(shù)調(diào)用成功,將返回轉(zhuǎn)換后的浮點數(shù),否則返回0。atof()函數(shù)聲明位于stdlib.h文件中,如果使用該函數(shù),則需要包含頭文件。7.4 數(shù)字與字符串的轉(zhuǎn)換3、sprintf()函數(shù)sprintf()函數(shù)是字符串格式化函數(shù),主要功能是把格式化的數(shù)據(jù)寫入

20、某個字符串中。int sprintf(char *buffer, const char *format, argument );參數(shù)buffer指向?qū)⒁獙懭氲淖址木彌_區(qū),參數(shù)format表示格式化字符串,參數(shù)aegument為可選參數(shù),表示的是需要轉(zhuǎn)換的數(shù)據(jù)。多學(xué)一招:使用函數(shù)itoa()將整數(shù)轉(zhuǎn)換為字符串itoa ()函數(shù)用于將一個整數(shù)轉(zhuǎn)換為不同進(jìn)制下的字符串。char *itoa(int val, char *dst, int radix);第1個參數(shù)val表示的是待轉(zhuǎn)換的數(shù),第2個參數(shù)表示的是目標(biāo)字符數(shù)組,第3個參數(shù)表示的是要轉(zhuǎn)換的進(jìn)制。多學(xué)一招:使用函數(shù)itoa()將整數(shù)轉(zhuǎn)換為字符串itoa()不是C語言標(biāo)準(zhǔn)中規(guī)定的函數(shù),因此在某些平

溫馨提示

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

評論

0/150

提交評論