第8章_字符串_第1頁
第8章_字符串_第2頁
第8章_字符串_第3頁
第8章_字符串_第4頁
第8章_字符串_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第第8章章 字符數(shù)組與字符串字符數(shù)組與字符串程序設(shè)計語言程序設(shè)計語言2什么是指針什么是指針指針也是一個變量,該變量中存儲的是另一個變量的內(nèi)指針也是一個變量,該變量中存儲的是另一個變量的內(nèi)存地址,此時稱指針變量指向該目標(biāo)變量存地址,此時稱指針變量指向該目標(biāo)變量如何定義指針變量如何定義指針變量 數(shù)據(jù)類型名數(shù)據(jù)類型名 *指針變量名;指針變量名;(NULL)與指針相關(guān)的運(yùn)算符與指針相關(guān)的運(yùn)算符 & *指針變量的初始化指針變量的初始化 數(shù)據(jù)類型數(shù)據(jù)類型 *指針名指針名=初始地址值;初始地址值;指向一維數(shù)組的指針指向一維數(shù)組的指針 ai *(a+i) *(p+i) pi &ai a+i p+i &pi回

2、回 顧顧3回回 顧顧指針的算術(shù)運(yùn)算的含義是指針的移動,將指針執(zhí)指針的算術(shù)運(yùn)算的含義是指針的移動,將指針執(zhí)行加上或者減去一個整數(shù)值行加上或者減去一個整數(shù)值n的運(yùn)算相當(dāng)于指針向的運(yùn)算相當(dāng)于指針向前或向后移動前或向后移動n個數(shù)據(jù)單元個數(shù)據(jù)單元指針可以執(zhí)行比較相等的運(yùn)算,用來判斷兩個指指針可以執(zhí)行比較相等的運(yùn)算,用來判斷兩個指針是否指向同一個變量針是否指向同一個變量利用利用malloc、calloc、free三個函數(shù)實(shí)現(xiàn)內(nèi)存三個函數(shù)實(shí)現(xiàn)內(nèi)存的動態(tài)分配的動態(tài)分配4本章主要內(nèi)容本章主要內(nèi)容字符數(shù)組與字符串的概念字符數(shù)組與字符串的概念字符串輸入字符串輸入/輸出函數(shù)輸出函數(shù)字符數(shù)組與字符指針字符數(shù)組與字符指針

3、字符串處理函數(shù)字符串處理函數(shù)5字符串的概念字符串的概念字符數(shù)據(jù)與字符串字符數(shù)據(jù)與字符串字符數(shù)據(jù)用對應(yīng)的字符編碼表示,常用字符數(shù)據(jù)用對應(yīng)的字符編碼表示,常用ASCII字符分為兩類字符分為兩類可打印字符和不可打印字符可打印字符和不可打印字符,在在C語言程序中,可打印字符可以直接書寫,而不語言程序中,可打印字符可以直接書寫,而不可打印字符可以用對應(yīng)的轉(zhuǎn)義字符表示,例如用可打印字符可以用對應(yīng)的轉(zhuǎn)義字符表示,例如用 n 表示回車符表示回車符通常把通常把若干字符的組合若干字符的組合看作一個整體,稱為字符看作一個整體,稱為字符串串6字符串的概念字符串的概念字符串常量字符串常量用用雙引號雙引號“ ”括起的字符

4、序列括起的字符序列字符串的存儲字符串的存儲在內(nèi)存中連續(xù)存儲,以字符在內(nèi)存中連續(xù)存儲,以字符0為結(jié)束標(biāo)識為結(jié)束標(biāo)識HelloWorld0“China University of Petroleum“Hello World printf( Input a number: n )定界符定界符ASCII碼值為碼值為07字符串與字符數(shù)組字符串與字符數(shù)組在語言中沒有專門的字符串變量,通常用在語言中沒有專門的字符串變量,通常用一個字一個字符數(shù)組來存放一個字符串符數(shù)組來存放一個字符串字符串字符串一串以一串以00結(jié)尾的字符在結(jié)尾的字符在C C語言中被看作字符串語言中被看作字符串用用雙引號括起的一串字符是字符串常

5、量雙引號括起的一串字符是字符串常量,C C語言自語言自動為其添加動為其添加00終結(jié)符終結(jié)符C C語言并沒有為字符串提供任何專門的表示法,完語言并沒有為字符串提供任何專門的表示法,完全全使用字符數(shù)組和字符指針使用字符數(shù)組和字符指針來處理來處理8字符串與字符數(shù)組字符串與字符數(shù)組字符數(shù)組字符數(shù)組每個元素都是字符類型的數(shù)組,它的每個元素每個元素都是字符類型的數(shù)組,它的每個元素存放一個字符(占一個字節(jié))存放一個字符(占一個字節(jié)) 如如 char name20;字符數(shù)組和字符串的區(qū)別是:字符數(shù)組和字符串的區(qū)別是:字符串的末尾有一字符串的末尾有一個空字符個空字符0字符數(shù)組中沒有字符數(shù)組中沒有 0 元素,就不

6、能按字符串元素,就不能按字符串處理處理9一維字符數(shù)組的初始化一維字符數(shù)組的初始化用用字符常量字符常量賦值賦值如:如: char c5=C, h, i, n, a;又如:又如:char c6=C, h, i, n, a, 0;再如:再如:char c7=C,h,i,n,a;ChinaChina0不是字符串不是字符串是字符是字符串串China00表示空字符表示空字符NULL10一維字符數(shù)組的初始化一維字符數(shù)組的初始化用字符的用字符的ASCII碼碼賦值賦值如:如: char c6=67,104,105,110,97,0;用用字符串常量字符串常量賦值賦值如:如: char c6=”China”;或者或

7、者char c6=”China”;China0是字符是字符串串 注:以注:以字符串字符串方式賦值時,必須保證數(shù)組元素個數(shù)方式賦值時,必須保證數(shù)組元素個數(shù)字字符個數(shù)符個數(shù)+1,(字符串后面自動加上一個(字符串后面自動加上一個0)。)。China011一維字符數(shù)組的初始化一維字符數(shù)組的初始化省略數(shù)組長度省略數(shù)組長度如:如: char c =C, h, i, n, a;再如:再如:char c =”China”;注意注意:不可以為數(shù)組單獨(dú)整體賦值,例如:不可以為數(shù)組單獨(dú)整體賦值,例如char str10; str=”China”; ChinaChina0不是字符串不是字符串是字符是字符串串12字符串

8、的輸入和輸出字符串的輸入和輸出對于字符串(字符數(shù)組),在程序中既可以逐個對于字符串(字符數(shù)組),在程序中既可以逐個引用字符串中的單個字符引用字符串中的單個字符(數(shù)組元素數(shù)組元素)也可以一次引用整個字符串也可以一次引用整個字符串(字符數(shù)組字符數(shù)組) (與數(shù)值型數(shù)組的區(qū)別與數(shù)值型數(shù)組的區(qū)別)C語言專門為字符串的輸入輸出定義了一系列庫函語言專門為字符串的輸入輸出定義了一系列庫函數(shù),常見的有數(shù),常見的有scanf和和printf、gets和和puts等等 13字符串的輸入和輸出字符串的輸入和輸出可以為可以為數(shù)組元素數(shù)組元素賦值,也可以輸入賦值,也可以輸入/輸出輸出元素的值元素的值【例】【例】對字符對字

9、符數(shù)組數(shù)組c1賦值賦值09,對字符數(shù)組,對字符數(shù)組c2賦值賦值A(chǔ)Z,然后輸出,然后輸出c1和和c2中的數(shù)據(jù)中的數(shù)據(jù)/chap8ex1.c#include void main () char c110, c226; int i; for(i=0; i10; i+) c1i=i+48; for(i=0; i26; i+) c2i=i+A; for(i=0; i10; i+) printf(%c ,c1i); printf(n); for(i=0; i26; i+) printf(%c ,c2i); printf(n); 14字符串的輸入和輸出字符串的輸入和輸出C語言中常用的字符串輸入輸出函數(shù)有語言

10、中常用的字符串輸入輸出函數(shù)有scanf和和printf、gets和和puts等等1 1、printfprintf函數(shù)函數(shù)一般格式為一般格式為printf(%s, printf(%s, 字符數(shù)組名字符數(shù)組名或或字符串常量字符串常量) )其中,其中,%s為字符串描述符為字符串描述符例如:例如: char c15=“Hello China!n; printf(%s, c); printf(%s, Hello.n);注意注意:用格式:用格式% %s s控制輸出控制輸出 1. 1. 輸出項(xiàng)一定要是地址輸出項(xiàng)一定要是地址 2. 2. 遇到遇到00便結(jié)束輸出便結(jié)束輸出15字符串的輸入和輸出字符串的輸入和輸出

11、void main() char a=h,e,l,0,l,o,0; printf(%s,a);例例輸出:輸出:hel數(shù)組中有多個數(shù)組中有多個00時時, ,遇第一個結(jié)束遇第一個結(jié)束16字符串的輸入和輸出字符串的輸入和輸出2 2、scanfscanf函數(shù)函數(shù)一般格式為一般格式為scanf(%s, scanf(%s, 字符數(shù)組字符數(shù)組) )其中,其中,%s為字符串描述符,對應(yīng)的輸入項(xiàng)是字符數(shù)組的為字符串描述符,對應(yīng)的輸入項(xiàng)是字符數(shù)組的首地址首地址例如:例如: char c10=“Hello”; scanf(%s, c); 注意注意:scanf scanf 接收數(shù)據(jù)的變量要求的是接收數(shù)據(jù)的變量要求的是

12、地址地址: : 對簡單變量對簡單變量( (數(shù)組元素數(shù)組元素) ),前面加,前面加& & 對一維數(shù)組,對一維數(shù)組,數(shù)組名數(shù)組名就是數(shù)組的首地址就是數(shù)組的首地址 對二維數(shù)組,只寫對二維數(shù)組,只寫行下標(biāo)行下標(biāo)是本行首地址是本行首地址無需加無需加“&”17字符串的輸入和輸出示例字符串的輸入和輸出示例/chap8ex2.c#includevoid main( )char s115;char s2 =L,i, ,s,i,0;char s3 =Wang wu;int i=0;printf(n 請向數(shù)組中輸入一個姓名:請向數(shù)組中輸入一個姓名:);scanf(%s,s1);printf( 第一個字符串是:第一個

13、字符串是:);while( s1i!=0 )printf(%c,s1i);i+;printf(n 第二個字符串是:第二個字符串是:);printf(%s,s2);printf(n 第三個字符串是:第三個字符串是:);printf(%sn,s3);18#include void main () char str20; printf(輸入一個字符串:輸入一個字符串:); scanf(%s,str); printf(輸入的字符串為:輸入的字符串為:%s,str); printf(n); 字符串的輸入和輸出字符串的輸入和輸出輸入一個字符串:輸入一個字符串:Hello使用使用 scanf scanf 時

14、,不時,不能輸入空格能輸入空格輸入的字符串為:輸入的字符串為:Hello輸入一個字符串:輸入一個字符串:Hello China輸入的字符串為:輸入的字符串為:Hellouscanfscanf函數(shù)使用空白(空格、制表符、回車符等)函數(shù)使用空白(空格、制表符、回車符等)作為輸入數(shù)據(jù)的分隔符,所以只能獲取作為輸入數(shù)據(jù)的分隔符,所以只能獲取“單詞單詞”uscanfscanf函數(shù)只能輸入不包括函數(shù)只能輸入不包括空格空格、tt和和nn的字符串的字符串19字符串的輸入和輸出字符串的輸入和輸出3 3、字符串輸入函數(shù)、字符串輸入函數(shù)gets( )gets( )調(diào)用格式調(diào)用格式gets(gets(字符數(shù)組字符數(shù)組

15、) )功能功能:從鍵盤輸入一個字符串(:從鍵盤輸入一個字符串()存入字符)存入字符數(shù)組中,用空字符數(shù)組中,用空字符0取代行尾的換行符取代行尾的換行符n,并,并返回一個函數(shù)值,該函數(shù)值是字符數(shù)組的首地址。返回一個函數(shù)值,該函數(shù)值是字符數(shù)組的首地址。4 4、字符串輸出函數(shù)、字符串輸出函數(shù)puts( )puts( )調(diào)用格式調(diào)用格式puts(puts(字符數(shù)組字符數(shù)組或或字符串常量字符串常量) )功能功能:輸出一個字符串,:輸出一個字符串,輸出后自動換行輸出后自動換行 即即 puts(str)與與 printf(%sn, str)等價等價使用使用gets()函數(shù)允許在字符串中輸入空格函數(shù)允許在字符串

16、中輸入空格20#include void main () char str15; printf(輸入一個字符串:輸入一個字符串:); gets(str); printf(“輸入的字符串是:輸入的字符串是:); puts(str); 字符串的輸入和輸出字符串的輸入和輸出使用使用 gets函數(shù)允函數(shù)允許許輸入空格輸入空格輸入一個字符串:輸入一個字符串:Hello China輸入的字符串是:輸入的字符串是:Hello ChinaHelloChina021字符串示例字符串示例【例】【例】輸入一句話,統(tǒng)計空格的個數(shù)輸入一句話,統(tǒng)計空格的個數(shù)#include void main () char line8

17、0; int i, count; printf(n 請輸入一行字符:請輸入一行字符:n ); gets(line); i=0, count = 0; while(linei !=0) if(linei = ) count+; i+; printf(n 其中的空格總數(shù)為其中的空格總數(shù)為 %d n , count);for(i=0, count = 0; linei !=0; i+) if(linei = ) count+;C is a programming language在循環(huán)執(zhí)行時,掃描整個數(shù)組以在循環(huán)執(zhí)行時,掃描整個數(shù)組以統(tǒng)計出空格統(tǒng)計出空格 的數(shù)量,直到遇的數(shù)量,直到遇到字符到字符0。

18、每次循環(huán)執(zhí)行時,。每次循環(huán)執(zhí)行時,都會更新計數(shù)器都會更新計數(shù)器 i 和和 count。其中的空格總數(shù)為其中的空格總數(shù)為 4練習(xí):練習(xí):輸入一句話,統(tǒng)計字母的個數(shù)輸入一句話,統(tǒng)計字母的個數(shù)22字符串?dāng)?shù)組字符串?dāng)?shù)組字符串?dāng)?shù)組字符串?dāng)?shù)組是存放了若干字符串的字符數(shù)組,是是存放了若干字符串的字符數(shù)組,是一個一個二維數(shù)組二維數(shù)組,每個字符串占一行,字符串的個,每個字符串占一行,字符串的個數(shù)對應(yīng)數(shù)組的行數(shù)數(shù)對應(yīng)數(shù)組的行數(shù)字符串?dāng)?shù)組的定義為:字符串?dāng)?shù)組的定義為:char 數(shù)組名數(shù)組名字符串個數(shù)字符串個數(shù)字符串長度字符串長度如:如: char str320;可將可將字符串?dāng)?shù)組字符串?dāng)?shù)組當(dāng)作一維數(shù)組使用,這個一維

19、數(shù)組中當(dāng)作一維數(shù)組使用,這個一維數(shù)組中的每個元素是一個字符串。的每個元素是一個字符串。23字符串?dāng)?shù)組字符串?dāng)?shù)組字符串?dāng)?shù)組的初始化:字符串?dāng)?shù)組的初始化:char a38=str1,str2,string3;char a38=str1,str2,string3;char b 6=s1,st2,str3;char b 6=s1,st2,str3;將字符串?dāng)?shù)組當(dāng)作一維數(shù)組使用,這個一維數(shù)組中的每將字符串?dāng)?shù)組當(dāng)作一維數(shù)組使用,這個一維數(shù)組中的每個元素是個一維數(shù)組個元素是個一維數(shù)組: a0,a1,a2str1str200string30000000a0a00a1a2數(shù)組數(shù)組a初始化后的存儲情況初始化后的存

20、儲情況24字符串?dāng)?shù)組字符串?dāng)?shù)組字符串的引用字符串的引用 要引用字符串?dāng)?shù)組中的字符串,可使用行地址要引用字符串?dāng)?shù)組中的字符串,可使用行地址第第i個字符串的地址為:個字符串的地址為:數(shù)組名數(shù)組名i 或者或者 *(數(shù)組名數(shù)組名+i)for(i=0;i3;i+) printf(%sn,ai); /* 輸出輸出i行字符串行字符串 */for(i=0;i3;i+) printf(%cn,aii); /* 輸出輸出i行行i列字符列字符 */for(i=0;i3;i+) printf(%sn,&aii+1); /* 輸出輸出i行行i+1列字符開始的字符串列字符開始的字符串 */25字符串?dāng)?shù)組示例字符串?dāng)?shù)組示例

21、【例】【例】輸入數(shù)字星期幾(星期天用輸入數(shù)字星期幾(星期天用0表示),輸出對應(yīng)的表示),輸出對應(yīng)的英文名稱英文名稱分析分析:建立如下星期表:用二維字符數(shù)組存儲星期表,每行存建立如下星期表:用二維字符數(shù)組存儲星期表,每行存一個字符串一個字符串S u n day 0M o n day 0T uesday 0W ed nesday 0T h ursday 0Friday 0S aturday 001234560123456789SundayMondayTuesdayWednesdayThursdayFridaySaturday012345626字符串?dāng)?shù)組示例字符串?dāng)?shù)組示例/chap8ex3.c#in

22、clude void main () char w_day 10=Sunday,Monday, Tuesday,Wednesday,Thursday,Friday, Saturday ; int num; printf(Enter a number(06):); scanf(%d,&num); if(num=0 &num=6) printf(%d:%s n, num, w_daynum); else printf(Error number!n);do printf(Enter a number(06):); scanf(%d,&num); while(num6);27字符串?dāng)?shù)組示例字符串?dāng)?shù)組示

23、例問題描述問題描述 某班有某班有N名同學(xué)參加考試,求成績最高的學(xué)生的姓名名同學(xué)參加考試,求成績最高的學(xué)生的姓名解題思路解題思路 1、定義兩個數(shù)組、定義兩個數(shù)組 snameN20和和 iscoreN分別存分別存放學(xué)生的姓名和成績放學(xué)生的姓名和成績 2、判斷成績最高者、判斷成績最高者 3、取成績最高者其對應(yīng)的學(xué)生姓名及成績輸出、取成績最高者其對應(yīng)的學(xué)生姓名及成績輸出28字符串?dāng)?shù)組示例字符串?dāng)?shù)組示例#include stdio.h#define N 3void main() char snameN10; int i,t,iscoreN; printf(順序輸入每個同學(xué)的姓名和成績(用空格分開)順序輸

24、入每個同學(xué)的姓名和成績(用空格分開)n); for(i=0;iN;i+) scanf(%s%d,snamei,&iscorei); t=0; for(i=1;iiscoret) t=i; printf(%s的成績最好,成績:的成績最好,成績:%dn,snamet,iscoret);29字符串處理函數(shù)字符串處理函數(shù)q與字符串有關(guān)的內(nèi)置函數(shù)在頭文件與字符串有關(guān)的內(nèi)置函數(shù)在頭文件string.h中定義中定義q要使用標(biāo)準(zhǔn)庫字符串處理函數(shù),程序前應(yīng)該包含:要使用標(biāo)準(zhǔn)庫字符串處理函數(shù),程序前應(yīng)該包含: #include string.hstrlenstrcpystrcmpstrcat30字符串的長度字符串

25、的長度字符串的長度是字符串中位于字符串的長度是字符串中位于 0 0 之前的字符的之前的字符的個數(shù)個數(shù)根據(jù)字符串中根據(jù)字符串中 0 的位置來計算字符串長度。的位置來計算字符串長度。若:數(shù)組中下標(biāo)為若:數(shù)組中下標(biāo)為i 的元素為的元素為0,則,則,串長串長= i?!纠壳笞址拈L度【例】求字符串的長度#include void main()int length=0;char str30; printf(Input a String: ); gets(str);while( strlength !=0 )length+;printf(n String length is %dn, length );

26、a b c d e f g 0串長串長length=7length=0length=1length=231求字符串長度函數(shù)求字符串長度函數(shù)求字符串長度函數(shù)求字符串長度函數(shù)語法格式:語法格式:strlen(s);功能功能:計算字符串:計算字符串s 中字符的個數(shù),并將字符的個數(shù)作中字符的個數(shù),并將字符的個數(shù)作為函數(shù)的返回值,不包括字符為函數(shù)的返回值,不包括字符 0。#include #include void main() int length=0; char str30; printf(Input a String: ); gets(str); while( strlength !=0 ) le

27、ngth+; printf(n String length is %dn, length );length= strlen(str);32字符串復(fù)制函數(shù)字符串復(fù)制函數(shù)字符串復(fù)制函數(shù)字符串復(fù)制函數(shù)語法格式語法格式:strcpy(dest,src);功能功能:把字符數(shù)組:把字符數(shù)組src中的字符串拷貝到字符數(shù)組中的字符串拷貝到字符數(shù)組dest中,中,0也一同拷貝。也一同拷貝。src也可以是一個字符串常量。也可以是一個字符串常量。#include #include void main()char source = We change lives;char target20;strcpy(target

28、, source);printf(n 源字符串源字符串 = %s, source);printf(n 目標(biāo)字符串目標(biāo)字符串 = %sn, target);目標(biāo)數(shù)組目標(biāo)數(shù)組源數(shù)組源數(shù)組 源字符串源字符串 = We change lives 目標(biāo)字符串目標(biāo)字符串 = We change livestarget= source ; ?字符串不能直接整體賦值,字符串不能直接整體賦值,必須借助必須借助strcpy!33字符串比較函數(shù)字符串比較函數(shù)字符串比較函數(shù)字符串比較函數(shù)語法格式語法格式:strcmp(str1,str2);功能功能:比較字符串:比較字符串str1和和str2的大小,返回比較的結(jié)的大小

29、,返回比較的結(jié)果。果。結(jié)果為:結(jié)果為:0-相等,相等,正數(shù)正數(shù)-str1大,大,負(fù)數(shù)負(fù)數(shù)-str2大大比較原則比較原則:按照:按照串中對應(yīng)位置字符的串中對應(yīng)位置字符的ASCII碼碼比較比較例如:例如: str1str2“abc” 與與 “abc” , strcmp(str1,str2)=0“abcd”與與 “abck”, strcmp(str1,str2)0 “abc” 與與 “b”, strcmp(str1,str2)0 34字符串比較函數(shù)字符串比較函數(shù)【例】【例】驗(yàn)證用戶輸入的用戶名及密碼是否正確驗(yàn)證用戶輸入的用戶名及密碼是否正確/chap8ex4.c#include #include v

30、oid main()char name15, pwd15;char sname =System, spwd = 123456;int login=0;printf(n 請輸入用戶名:請輸入用戶名: );gets(name);printf(n 請輸入密碼:請輸入密碼: );gets(pwd);if(strcmp(name, sname)=0) & (strcmp(pwd,spwd)=0) login=1;if (login) printf(n 您已成功登錄!您已成功登錄! n );elseprintf(n 用戶名和用戶名和/或密碼無效!或密碼無效! n ); 請輸入用戶名:請輸入用戶名:Syst

31、em 請輸入密碼:請輸入密碼: 123456 您已成功登錄!您已成功登錄!name= sname?思考:如何允許用戶三次輸入密碼?思考:如何允許用戶三次輸入密碼?字符串不能用關(guān)系運(yùn)算符比較大小,字符串不能用關(guān)系運(yùn)算符比較大小,必須借助必須借助strcmp!35字符串連接字符串連接將串將串str2連接到串連接到串str1之后。根據(jù)字符串中之后。根據(jù)字符串中 0 的的位置進(jìn)行字符串連接。關(guān)鍵:要用位置進(jìn)行字符串連接。關(guān)鍵:要用str2的第的第1個字符個字符覆蓋覆蓋str1的串結(jié)束標(biāo)記的串結(jié)束標(biāo)記0。算法:算法:1 1、查找、查找str1str1的串結(jié)束標(biāo)記的串結(jié)束標(biāo)記002 2、從、從str1st

32、r1的的00開始,將開始,將str2str2復(fù)制到復(fù)制到str1str1后面后面。0 x y . zaab c d e f g 0b c d e f g 0str2str1.36字符串連接字符串連接#include void main() char str1100,str2100;int i, j;printf (Enter string 1:);gets (str1);printf (Enter string 2:);gets (str2);for(i=0;str1i!=0;i+ ); /* 確定確定0位置位置 */for(j=0;(str1i=str2j)!=0;i+,j+ );print

33、f(“Output string 1:%sn”,str1);37字符串連接函數(shù)字符串連接函數(shù)字符串連接函數(shù)字符串連接函數(shù)語法格式語法格式:strcat(dest,src);功能功能:連接兩個字符數(shù)組中的字符串,將連接兩個字符數(shù)組中的字符串,將src串接在串接在dest串后,結(jié)果存放在字符數(shù)組串后,結(jié)果存放在字符數(shù)組dest中,中,返回的函數(shù)返回的函數(shù)值是字符數(shù)組值是字符數(shù)組dest的首地址。的首地址。字符數(shù)組字符數(shù)組dest的長度不可缺省,應(yīng)足夠大。的長度不可缺省,應(yīng)足夠大。目標(biāo)數(shù)組目標(biāo)數(shù)組源數(shù)組源數(shù)組#include #include int main(void)char source_st

34、ring = UPC;char target_string30 = Hello ;strcat(target_string, source_string);printf(n 源字符串源字符串 = %s, source_string);printf(n 目標(biāo)字符串目標(biāo)字符串 = %sn, target_string); 源字符串源字符串 = UPC 目標(biāo)字符串目標(biāo)字符串 = Hello UPC38字符指針字符指針字符指針是指向字符串的指針,定義為:字符指針是指向字符串的指針,定義為: 可以用字符數(shù)組為指針賦初值可以用字符數(shù)組為指針賦初值char a =Welcome to UPC.;char *

35、p=a; 也可以用字符串常量的地址為指針賦初值也可以用字符串常量的地址為指針賦初值char *p=Hello; 由于由于p為指針變量,指針指向是可以改變的為指針變量,指針指向是可以改變的char *p=Hello, *q=p;p=world; 如果如果x為字符數(shù)組,則令為字符數(shù)組,則令x=abc是是錯誤錯誤的的39字符指針字符指針char *ptr = C Language; CLanguage0ptrchar *ps=We change lives;int n=10;ps=ps+n;printf(%sn,ps);Wec h an gel ives0ps lives40字符指針字符指針字符數(shù)組

36、與字符指針變量比較字符數(shù)組與字符指針變量比較 : 1、char str20=“china”; 與與char *p=“china”; 2、str由若干元素組成,每個元素放一個字符;而由若干元素組成,每個元素放一個字符;而p中存中存放字符串首地址放字符串首地址3、char str20; str=“I love China!”; () char *p; ( )4、str是地址是地址常量常量;p是指針是指針變量變量5、都可以用、都可以用stri、pi表示某個字符表示某個字符41字符指針字符指針字符數(shù)組與字符指針變量比較字符數(shù)組與字符指針變量比較 : 例例 char str10; scanf(“%s”,

37、str); ( )而而 char *p; scanf(“%s”,p); ( )改為改為: char *p,str10; p=str; scanf(“%s”,p); ( )gets(p)同樣同樣!要求一個確定的地址要求一個確定的地址strcpy(str,“china”);str=“tianjing”;str+; a=p;p=“china”; p+;p=str;strcpy(p,“china”);42字符指針字符指針char str =“Hello!”; char str =“Hello!”; char str =H,e,l,l,o,0; char *p=“Hello”; int a =1,2,3

38、,4,5; *p=1,2,3,4,5; char str10,*p;int a10,*p;str=“Hello”; p=“Hello!”; a=1,2,3,4,5; p=1,2,3,4,5; char str10,*s;int a10;scanf(“%s”,str);printf(“%s”,str);gets(str);puts(str);gets(s); ( )( )( )( )( )(X)( )( )( )(X)(X)( )(X)(X)43字符指針字符指針【例】【例】輸入一個字符串,然后把其中的大寫字母轉(zhuǎn)化為小寫字輸入一個字符串,然后把其中的大寫字母轉(zhuǎn)化為小寫字母,輸出轉(zhuǎn)化后的字符串母,輸

39、出轉(zhuǎn)化后的字符串/chap8ex7.c#include void main()char str256, *p=str; int i = 0;printf(輸入一串字符:輸入一串字符:);gets( p );for( ; *p != 0; p+)if( *p = A & *p = Z) i+; *p = *p + a - A;p= str;printf( 轉(zhuǎn)換后為:轉(zhuǎn)換后為:%s n, p );printf( 共轉(zhuǎn)換了共轉(zhuǎn)換了 %d 個大寫字母個大寫字母n, i );44字符指針字符指針【例】【例】讀下列程序,寫出執(zhí)行結(jié)果讀下列程序,寫出執(zhí)行結(jié)果#include #include void ma

40、in()void main() char str =“adapt”;char str =“adapt”; char char * *ps = program ;ps = program ;str2=str2=o o; ;printf( %s , %s n, str, ps+3 );printf( %s , %s n, str, ps+3 );printf( %c , %c n, printf( %c , %c n, * *str, str, * *(ps+3);(ps+3); adopt , gram a , g45指向字符串?dāng)?shù)組的指針指向字符串?dāng)?shù)組的指針指向字符串?dāng)?shù)組的指針指向字符串?dāng)?shù)組的指針定義指向字符串?dāng)?shù)組的指針的方法是:定義指向字符串?dāng)?shù)組的指針的方法是:char (*指針指針)字符串長度字符串長度其中,其中,“字符串長度字符串長度”必須與字符串?dāng)?shù)組相同必須與字符串?dāng)?shù)組相同/chap8ex8.c#include void main()char sFruit510=Apple, Pear, Banana, Peach, Plum;char (*p)10;p = &sFruit1; puts(*p);p = sFruit+3;printf(%s n, *p);46字符指針

溫馨提示

  • 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

提交評論