c語(yǔ)言課件《字符串》解讀_第1頁(yè)
c語(yǔ)言課件《字符串》解讀_第2頁(yè)
c語(yǔ)言課件《字符串》解讀_第3頁(yè)
c語(yǔ)言課件《字符串》解讀_第4頁(yè)
c語(yǔ)言課件《字符串》解讀_第5頁(yè)
已閱讀5頁(yè),還剩73頁(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)介

第10章字符串第10章字符串本章學(xué)習(xí)內(nèi)容

字符串常量

字符串處理函數(shù)

字符數(shù)組和字符指針

向函數(shù)傳遞字符串

從函數(shù)返回一個(gè)字符串指針本章學(xué)習(xí)內(nèi)容字符串常量10.1字符串常量用雙引號(hào)括起的一串字符是字符串常量,C語(yǔ)言自動(dòng)為其添加'\0'結(jié)束符"Howareyou"一串以‘\0’結(jié)尾的字符序列在C語(yǔ)言中被看作字符串。ASCII碼值為010.1字符串常量用雙引號(hào)括起的一串字符是字符串常量,C語(yǔ)言4字符串的存儲(chǔ)在內(nèi)存中連續(xù)存儲(chǔ),以字符’\0’為結(jié)束標(biāo)識(shí)C語(yǔ)言中沒(méi)有專門(mén)的字符串變量,通常用一個(gè)字符數(shù)組來(lái)存放一個(gè)字符串,使用字符數(shù)組或字符指針來(lái)處理字符串HelloWorld\010.2字符串的存儲(chǔ)4HelloWorld\010.2字符串的存儲(chǔ)說(shuō)明:’\0’代表ASCII碼為0的字符,從ASCII碼表中可以查到,ASCII碼為0的字符不是一個(gè)可以顯示的字符,而是一個(gè)“空操作符”,即它什么也不做。用它來(lái)作為字符串結(jié)束標(biāo)志不會(huì)產(chǎn)生附加的操作或增加有效字符,只是一個(gè)供辨別的標(biāo)識(shí)。5說(shuō)明:56字符數(shù)組字符數(shù)組每個(gè)元素都是字符類型的數(shù)組。它的每個(gè)元素存放一個(gè)字符(占一個(gè)字節(jié))字符數(shù)組的定義如charc[10];數(shù)組c是一維數(shù)組,它可以存放10個(gè)字符,或者一個(gè)長(zhǎng)度不大于9的字符串如charname[3][10];數(shù)組c是二維數(shù)組,它可以存放30個(gè)字符,或者3個(gè)長(zhǎng)度不大于9的字符串注意:字符串只能存放在字符數(shù)組中6字符數(shù)組字符數(shù)組7一維字符數(shù)組的初始化用字符常量賦值 如:charc[5]={'C','h','i','n','a'};又如:

charc[6]={'C','h','i','n','a','\0'};再如:charc[7]={'C','h','i','n','a'};ChinaChina\0不是字符串是字符串China\0\07一維字符數(shù)組的初始化用字符常量賦值ChinaChina\08用字符的ASCII碼賦值如:charc[6]={67,104,105,110,97,0};用字符串常量賦值

如:charc[6]={“China”};或者charc[6]=“China”;China\0是字符串

注:以字符串方式賦值時(shí),必須保證數(shù)組元素個(gè)數(shù)≥字符個(gè)數(shù)+1,(字符串后面需自動(dòng)加上一個(gè)'\0')。China\08用字符的ASCII碼賦值China\0是字符串注:以字符9一維字符數(shù)組的初始化省略數(shù)組長(zhǎng)度

如:charc[]={'C','h','i','n','a'};再如:

charc[]=“China”;注意:不可以為數(shù)組單獨(dú)整體賦值,例如

charstr[10];str=“China”;ChinaChina\0是字符數(shù)組,但不代表字符串是字符串×9一維字符數(shù)組的初始化省略數(shù)組長(zhǎng)度

ChinaChina\010.3字符指針HelloChina\0字符指針就是指向字符類型數(shù)據(jù)的指針"HelloChina"pStr10.3字符指針Hel11字符指針是指向字符型數(shù)據(jù)的指針,定義為:

char*指針;

可以用字符數(shù)組首地址為指針賦初值

chara[]="WelcometoBeijing."; char*p=a;//對(duì)于一維數(shù)組,數(shù)組名代表首地址

也可以用字符串常量為指針賦初值

char*p=“Hello”;//字符串常量本身代表首地址對(duì)p初始化,即使p指向字符串的第一個(gè)字符。11字符指針是指向字符型數(shù)據(jù)的指針,定義為:

由于p為指針變量,指針指向是可以改變的

char*p="Hello",*q=p; p="world";12由于p為指針變量,指針指向是可以改變的1213字符數(shù)組與字符指針變量比較:1、charstr[20]=“china”;

與char*p=“china”;2、str數(shù)組由20個(gè)元素組成;而p中存放字符串首地址3、charstr[20];str=“IloveChina!”;(X)char*p;p=“IloveChina!”;(

)4、str是地址常量;p是指針變量13字符數(shù)組與字符指針變量比較:14字符數(shù)組元素的訪問(wèn)可以為數(shù)組元素賦值,也輸出元素的值【例】對(duì)字符數(shù)組c1賦值’0’~’9’,對(duì)字符數(shù)組c2賦值’A’~’Z’,然后輸出c1和c2中的數(shù)據(jù)#include<stdio.h>voidmain(){charc1[10],c2[26];inti; for(i=0;i<10;i++)c1[i]=i+48;

for(i=0;i<26;i++)c2[i]=i+'A';

for(i=0;i<10;i++)printf("%c",c1[i]);printf("\n");

for(i=0;i<26;i++)printf("%c",c2[i]);

printf("\n");}10.4字符串的訪問(wèn)和輸入/輸出14字符數(shù)組元素的訪問(wèn)可以為數(shù)組元素賦值,也輸出元素的值#i15字符串的輸入和輸出C語(yǔ)言中常用的字符串輸入輸出函數(shù)有scanf和printf、gets和puts等1、printf函數(shù)一般格式為:

printf("%s",字符數(shù)組名或字符串常量)

其中,%s為字符串格式符 例如:

charc[15]=“HelloChina!";printf("%s",c);printf(“%s”,“HelloChina!");注意:用格式%s控制輸出

1.輸出項(xiàng)一定要是地址

2.遇到‘\0’便結(jié)束輸出15字符串的輸入和輸出C語(yǔ)言中常用的字符串輸入輸出函數(shù)有sc162、scanf函數(shù)一般格式為:

scanf(“%s”,字符數(shù)組名)

其中,%s為字符串描述符,對(duì)應(yīng)的輸入項(xiàng)是字符數(shù)組的首地址 例如:

charc[10];scanf("%s",c);注意:scanf接收數(shù)據(jù)的變量要求的是地址:

對(duì)變量(數(shù)組元素),前面才加&

對(duì)一維數(shù)組,數(shù)組名就是數(shù)組的首地址

不能加“&”162、scanf函數(shù)注意:scanf接收數(shù)據(jù)的變量要求的【例10.1】從鍵盤(pán)輸入一個(gè)人名,把它顯示在屏幕上Why?scanf函數(shù)使用空白(空格、制表符、回車(chē)符等)作為輸入數(shù)據(jù)的分隔符,所以只能獲取“單詞”【例10.1】從鍵盤(pán)輸入一個(gè)人名,把它顯示在屏幕上Why?【例10.1】從鍵盤(pán)輸入一個(gè)人名,把它顯示在屏幕上【例10.1】從鍵盤(pán)輸入一個(gè)人名,把它顯示在屏幕上193、字符串輸入函數(shù)gets()

調(diào)用格式:gets(字符數(shù)組名)

功能:從鍵盤(pán)輸入一個(gè)字符串(以回車(chē)結(jié)束)存入字符數(shù)組中,用空字符’\0’行尾。4、字符串輸出函數(shù)puts()

調(diào)用格式:puts(字符數(shù)組名或字符串常量本身)

功能:輸出一個(gè)字符串,輸出后自動(dòng)換行

即puts(str)與printf("%s\n",str)等價(jià)使用gets()函數(shù)允許在字符串中輸入空格193、字符串輸入函數(shù)gets()即puts(str)與用puts函數(shù)輸出的字符串中可以包含轉(zhuǎn)義字符。例如:charstr[]={“China\nBeijing”};puts(str);

輸出:ChinaBeijing

在輸出完字符后自動(dòng)換行。20用puts和gets函數(shù)只能輸出或輸入一個(gè)字符串,不能寫(xiě)成puts(str1,str2)

或gets(str1,str2)用puts函數(shù)輸出的字符串中可以包含轉(zhuǎn)義字符。例如:20用p21#include<stdio.h>voidmain(){charstr[15];printf("輸入一個(gè)字符串:");

gets(str);printf(“\n輸入的字符串是:");

puts(str);}字符串的輸入和輸出使用gets函數(shù)允許輸入空格輸入一個(gè)字符串:HelloChina輸入的字符串是:Hello

ChinaHelloChina\021#include<stdio.h>字符串的輸入和輸出使22【例】輸入一句話,統(tǒng)計(jì)空格的個(gè)數(shù)#include<stdio.h>voidmain(){charline[80];inti,count;printf("\n請(qǐng)輸入一行字符:\n");

gets(line);

i=0,count=0;while(line[i]!='\0')

{if(line[i]=='')count++; i++;}printf("\n其中的空格總數(shù)為%d\n",count);}for(i=0,count=0;line[i]!='\0';i++)if(line[i]=='')count++;22【例】輸入一句話,統(tǒng)計(jì)空格的個(gè)數(shù)#include<st【例10.2】使用函數(shù)gets(),從鍵盤(pán)輸入一個(gè)帶有空格的人名,然后把它顯示在屏幕上【例10.2】使用函數(shù)gets(),從鍵盤(pán)輸入一個(gè)帶有空格的c語(yǔ)言ppt課件《字符串》解讀能夠限制輸入字符串的長(zhǎng)度從標(biāo)準(zhǔn)輸入stdin中讀取一行長(zhǎng)度為sizeof(name)的字符串送到name為首地址的緩沖存儲(chǔ)區(qū)去能夠限制輸入字符串的長(zhǎng)度從標(biāo)準(zhǔn)輸入stdin中讀取一行長(zhǎng)度為【例10.3】從鍵盤(pán)輸入一個(gè)帶有空格的人名,然后在顯示人名的前面顯示"Hello",Isaidto【例10.3】從鍵盤(pán)輸入一個(gè)帶有空格的人名,然后在顯示人名的【例10.3】從鍵盤(pán)輸入一個(gè)帶有空格的人名,然后在顯示人名的前面顯示"Hello",Isaidto【例10.3】從鍵盤(pán)輸入一個(gè)帶有空格的人名,然后在顯示人名的10.5字符串處理函數(shù)10.5字符串處理函數(shù)29字符串?dāng)?shù)組字符串?dāng)?shù)組是存放了若干字符串的字符數(shù)組,是一個(gè)二維數(shù)組,每個(gè)字符串占一行,字符串的個(gè)數(shù)對(duì)應(yīng)數(shù)組的行數(shù);字符串?dāng)?shù)組的定義為:char數(shù)組名[字符串個(gè)數(shù)][字符串長(zhǎng)度]如:charstr[3][20];29字符串?dāng)?shù)組字符串?dāng)?shù)組是存放了若干字符串的字符數(shù)組,是一個(gè)30字符串?dāng)?shù)組的初始化:chara[3][8]={"str1","str2","string3"};charb[][6]={"s1","st2","str3"};字符串的引用將字符串?dāng)?shù)組當(dāng)作一維數(shù)組使用,這個(gè)一維數(shù)組中的每個(gè)元素是個(gè)一維數(shù)組:{a[0],a[1],a[2]}引用二維字符數(shù)組的行下標(biāo):a[0],a[1],a[2]str1str2\0\0string3\0\0\0\0\0\0\0a[0]a[0][0]a[1]a[2]數(shù)組a初始化后的存儲(chǔ)情況30字符串?dāng)?shù)組的初始化:str1str2\0\0string31【例】輸入數(shù)字星期幾(星期天用0表示),輸出對(duì)應(yīng)的英文名稱分析: 建立如下星期表:用二維字符數(shù)組存儲(chǔ)星期表,每行存一個(gè)字符串Sunday\0Monday\0Tuesday\0Wednesday\0Thursday\0Friday\0Saturday\001234560123456789\0\0\0\0\0\0\0\0\0\0\0\0\0SundayMondayTuesdayWednesdayThursdayFridaySaturday012345631【例】輸入數(shù)字星期幾(星期天用0表示),輸出對(duì)應(yīng)的英文名32#include<stdio.h>voidmain(){charw_day[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

intnum;printf("Enteranumber(0~6):");scanf("%d",&num);if(num>=0&&num<=6)printf("%d:%s\n",num,w_day[num]);elseprintf("Errornumber!\n");}do{printf("Enteranumber(0~6):");scanf("%d",&num);}while(num<0

||num>6);32#include<stdio.h>do33字符串處理函數(shù)與字符串有關(guān)的函數(shù)在頭文件string.h中定義要使用標(biāo)準(zhǔn)庫(kù)字符串處理函數(shù),程序前應(yīng)該包含:

#include<string.h>string.hstrlenstrcpystrcmpstrcat……33字符串處理函數(shù)與字符串有關(guān)的函數(shù)在頭文件string.h34字符串的長(zhǎng)度字符串的長(zhǎng)度是字符串中位于\0之前的字符的個(gè)數(shù)根據(jù)字符串中

\0的位置來(lái)計(jì)算字符串長(zhǎng)度。 若:數(shù)組中下標(biāo)為i

的元素為\0,則,串長(zhǎng)=

i。例:求字符串的長(zhǎng)度#include<stdio.h>voidmain(){ intlength=0; charstr[30];printf("InputaString:");gets(str);

while(

str[length]!='\0'

)

length++; printf("\nStringlengthis%d\n",length);}abcdefg\0串長(zhǎng)length=7length=0length=1length=234字符串的長(zhǎng)度字符串的長(zhǎng)度是字符串中位于\0之前的字符35求字符串長(zhǎng)度函數(shù)求字符串長(zhǎng)度函數(shù)

語(yǔ)法格式:strlen(字符數(shù)組名);

功能:計(jì)算字符串中字符的個(gè)數(shù),并將字符的個(gè)數(shù)作為函數(shù)的返回值,不包括字符\0。#include<string.h>#include<stdio.h>voidmain(){intlength=0;charstr[30];printf("InputaString:");gets(str);while(

str[length]!='\0'

)length++;printf("\nStringlengthis%d\n",length);}length=strlen(str);35求字符串長(zhǎng)度函數(shù)求字符串長(zhǎng)度函數(shù)#include<st36字符串復(fù)制函數(shù)字符串復(fù)制函數(shù)

語(yǔ)法格式:strcpy(dest,src);

功能:把字符數(shù)組src中的字符串拷貝到字符數(shù)組dest中,\0也一同拷貝。src也可以是一個(gè)字符串常量。函數(shù)調(diào)用后返回的是字符數(shù)組dest的首地址。#include<stdio.h>#include<string.h>intmain(void){ charsource[]="Wechangelives"; chartarget[20];

strcpy(target,

source); printf("\n源字符串=%s",source); printf("\n目標(biāo)字符串=%s\n",target);return0;}目標(biāo)數(shù)組名源字符串=Wechangelives目標(biāo)字符串=Wechangelivestarget=source;?字符串不能直接整體賦值必須借助strcpy!源數(shù)組名36字符串復(fù)制函數(shù)字符串復(fù)制函數(shù)#include<stdi37字符串比較函數(shù)字符串比較函數(shù)

語(yǔ)法格式:strcmp(str1,str2);

功能:比較字符串str1和str2的大小,返回比較的結(jié)果。結(jié)果為:

0--相等,正數(shù)--str1大,負(fù)數(shù)--str2大

比較原則:按照串中對(duì)應(yīng)位置字符的ASCII碼值比較例如:str1 str2

“abc”與“abc”,strcmp(str1,str2)==0 “abcd”與“abck”,strcmp(str1,str2)<0 “abc”與“ab”,strcmp(str1,str2)>0 “abc”與“b”,strcmp(str1,str2)<037字符串比較函數(shù)字符串比較函數(shù)38【例】驗(yàn)證用戶輸入的用戶名及密碼是否正確#include<stdio.h>#include<string.h>voidmain(){ charname[15],pwd[15]; charsname[]="System",spwd[]="123456"; intlogin=0; printf("\n請(qǐng)輸入用戶名:"); gets(name); printf("\n請(qǐng)輸入密碼:"); gets(pwd); if((strcmp(name,

sname)==0)&&(strcmp(pwd,spwd)==0)) login=1; if(login)printf("\n您已成功登錄!\n"); else printf("\n用戶名和/或密碼無(wú)效!\n");}請(qǐng)輸入用戶名:System請(qǐng)輸入密碼:123456

您已成功登錄!name==sname?字符串不能用關(guān)系運(yùn)算符比較大小,必須借助strcmp!38【例】驗(yàn)證用戶輸入的用戶名及密碼是否正確#include39字符串連接函數(shù)字符串連接函數(shù)

語(yǔ)法格式:strcat(dest,src);

功能:連接兩個(gè)字符數(shù)組中的字符串,將src串接在dest串后,結(jié)果存放在字符數(shù)組dest中,函數(shù)調(diào)用后返回的是字符數(shù)組dest的首地址。

字符數(shù)組dest的長(zhǎng)度不可缺省,應(yīng)足夠大。目標(biāo)數(shù)組名源數(shù)組名#include<stdio.h>#include<string.h>intmain(void){ charsource_string[]="UPC"; chartarget_string[30]="Hello";

strcat(target_string,source_string); printf("\n源字符串=%s",source_string); printf("\n目標(biāo)字符串=%s\n",target_string);}源字符串=UPC目標(biāo)字符串=HelloUPC39字符串連接函數(shù)字符串連接函數(shù)目標(biāo)數(shù)組名源數(shù)組名#inclstrcat(str2,str1);str2必須足夠大!Hello\0\0\0\0\0\0

\0

China\0HelloChina\0

\0strcat(str2,str1);str2必須足夠大!H【例10.4】按奧運(yùn)會(huì)參賽國(guó)國(guó)名在字典中的順序(由小到大)對(duì)其入場(chǎng)次序進(jìn)行排序【例10.4】按奧運(yùn)會(huì)參賽國(guó)國(guó)名在字典中的順序(由小到大c語(yǔ)言ppt課件《字符串》解讀c語(yǔ)言ppt課件《字符串》解讀#include<stdio.h>#include<string.h>intmain(void){ charsource_string[]="UPC"; chartarget_string[30]="Hello";

strncat(target_string,source_string,2); printf("\n源字符串=%s",source_string); printf("\n目標(biāo)字符串=%s\n",target_string);}#include<stdio.h>10.6向函數(shù)傳遞字符串向函數(shù)傳遞字符串時(shí),既可使用字符數(shù)組作函數(shù)參數(shù),也可使用字符指針作函數(shù)參數(shù)

傳地址調(diào)用例10.5:字符串復(fù)制—將字符串a(chǎn)復(fù)制到串b中,再輸出串b。要求不能使用strcpy()10.6向函數(shù)傳遞字符串向函數(shù)傳遞字符串時(shí),既可使用字符數(shù)組#include<stdio.h>#defineN80voidMyStrcpy(chardstStr[],charsrcStr[]);intmain(){ chara[N],b[N]; printf("Inputastring:"); gets(a);/*輸入字符串*/

MyStrcpy(b,a);/*將字符數(shù)組a中的字符串拷貝到b中*/ printf("Thecopyis:"); puts(b);/*輸出復(fù)制后的字符串*/ return0;}#include<stdio.h>voidMyStrcpy(chardstStr[],charsrcStr[]){

inti=0;

while(srcStr[i]!='\0') { dstStr[i]=srcStr[i]; i++; } dstStr[i]='\0';}HelloChina\0

srcStr[i]dstStr[i]Hi=0ei=1li=2li=3oi=4i=5Ci=6hi=7ii=8ni=9ai=10\0srcStr[i]=='\0voidMyStrcpy(chardstStr[],voidMyStrcpy(char*dstStr,char*srcStr){

while(*srcStr!='\0') { *dstStr=*srcStr; srcStr++; dstStr++; } *dstStr='\0';}例10.5:字符串復(fù)制—用字符指針編程HelloChina\0

*srcStr*dstStrHelloChina\0*srcStr=='\0srcStr++srcStrdstStr++dstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrsrcStrdstStrvoidMyStrcpy(char*dstStr,c#include<stdio.h>unsignedintMyStrlen(charstr[]);intmain(){ chara[80]; unsignedintlen; printf("Pleaseenterastring:"); gets(a);

len=MyStrlen(a);/*計(jì)算字符串實(shí)際字符個(gè)數(shù)*/ printf("Thelengthofthestringis:%u\n",len); return0;}例10.6:計(jì)算實(shí)際字符個(gè)數(shù)(不使用strlen()函數(shù))#include<stdio.h>例10.6:計(jì)算實(shí)際unsignedintMyStrlen(charstr[]){

inti;

unsignedintlen=0;

for(i=0;str[i]!='\0';i++) { len++; }

return(len);}unsignedintMyStrlen(char*pStr){

unsignedintlen=0;

for(;*pStr!='\0';pStr++) { len++; }

return(len);}方法2:用字符指針實(shí)現(xiàn)方法1:用字符數(shù)組實(shí)現(xiàn)統(tǒng)計(jì)實(shí)際字符個(gè)數(shù)

(不含'\0')unsignedintMyStrlen(charst將字符串倒置后再打印出來(lái)。對(duì)于存放了字符串的字符數(shù)組,倒置僅僅是對(duì)結(jié)束符前的字符進(jìn)行的apple\0字符數(shù)組selppa\0字符數(shù)組s(a)倒置前(b)倒置后【例】51將字符串倒置后再打印出來(lái)。對(duì)于存放了字符串的字符數(shù)組,倒置僅方法1:使用數(shù)組#include<stdio.h>voidmain(){ charstrTemp[256],ch; inti,j; printf("輸入一串字符:"); gets(strTemp); i=j=0; while(strTemp[j]!=‘\0’)j++;/*得到\0的下標(biāo)*/

j--; while(i<j) { ch=strTemp[j]; strTemp[j]=strTemp[i]; strTemp[i]=ch; i++; j--; } printf("倒置后為:%s\n",strTemp);}方法2:使用指針#include<stdio.h>voidmain(){ charstrTemp[256],ch; char*p1,*p2; printf("輸入一串字符:"); gets(strTemp); p2=p1=strTemp; while(*p2!='\0')p2++;

p2--; while(p1<p2) { ch=*p1; *p1=*p2; *p2=ch; p1++; p2--; } printf("倒置后為:%s\n",strTemp);}52方法1:使用數(shù)組方法2:使用指針52函數(shù)指針(FunctionPointers)就是指向函數(shù)的指針(PointertoaFunction)指向函數(shù)的指針變量存儲(chǔ)的是函數(shù)在內(nèi)存中的入口地址

編譯器將不帶()的函數(shù)名解釋為該函數(shù)的入口地址

函數(shù)指針形式為:數(shù)據(jù)類型(*指針名)(參數(shù)列表);例如:int(*p)(int,int);定義p是一個(gè)指向函數(shù)的指針變量,它指向函數(shù)的類型為整型且有兩個(gè)整型參數(shù)的函數(shù)。p的類型用int(*)(int,int)表示。10.7從函數(shù)返回字符指針回顧第9章的函數(shù)指針:函數(shù)指針(FunctionPointers)就是指向函數(shù)的常見(jiàn)寫(xiě)法錯(cuò)誤:忘記了前一個(gè)(),寫(xiě)成int*p();/*聲明一個(gè)函數(shù)名為p、返回值是整型指針的函數(shù)*/忘掉了后一個(gè)(),寫(xiě)成int(*p);

/*定義了一個(gè)整型指針*/定義時(shí)后一個(gè)括號(hào)內(nèi)的參數(shù)類型與指向的函數(shù)參數(shù)類型不匹配常見(jiàn)寫(xiě)法錯(cuò)誤:常用的字符串處理函數(shù)都是有返回值的,例如:字符串復(fù)制函數(shù)

語(yǔ)法格式:strcpy(dest,src);字符串連接函數(shù)

語(yǔ)法格式:strcat(dest,src);二者的原型:char*strcpy(char*str1,constchar*str2);char*strcat(char*str1,constchar*str2);返回值都是字符串str1的內(nèi)存空間的首地址(字符指針str1的值)。常用的字符串處理函數(shù)都是有返回值的,例如:字符串復(fù)制函數(shù)增加靈活性,方便級(jí)聯(lián)操作:strcat(str1,"helloChina");len=strlen(str1);len=strlen(strcat(tr1,"HelloChina");MyStrcat(str1,str2);printf(“%s”,str1);printf(“%s”,MyStrcat(str1,str2));增加靈活性,方便級(jí)聯(lián)操作:【例10.7】編程實(shí)現(xiàn)strcat()的功能【例10.7】編程實(shí)現(xiàn)strcat()的功能c語(yǔ)言ppt課件《字符串》解讀返回字符串首地址返回字符串首地址const類型限定符const是一個(gè)C語(yǔ)言的關(guān)鍵字,它限定一個(gè)變量不允許被改變。三種基本應(yīng)用:一.應(yīng)用在變量constchara='A';a='B';

//錯(cuò)誤,變量a的值不可以修改。此時(shí)代表變量a值不可改變,任何企圖修改a變量值的語(yǔ)句都會(huì)報(bào)錯(cuò)。const類型限定符const是一個(gè)C語(yǔ)言的關(guān)鍵字,它限定二.應(yīng)用在指針

1)應(yīng)用在*左邊

constchar*p;

charconst*p;

以上兩條語(yǔ)句作用一樣,都是表示指針指向的變量值(即:*p)不可以修改,但指針p可以修改。

例如:

constchar*p=&a;

char*q=&b;

*p=b;

//錯(cuò),指針指向的值不可以修改。

p=q;

//對(duì),指針值可以修改二.應(yīng)用在指針

2)應(yīng)用在*右邊

char*constp;

表示指針值(p)不可以改變,但指針指向的值(*p)可以改變。

例如:

char*constp=&a;

char*q=&b;

*p='b';

//對(duì),指針指向的值可以修改。

p=q;

//錯(cuò)誤,指針值不可以修改。對(duì)于:constchar*constp=&a;p和*p都不可以修改。

2)應(yīng)用在*右邊字符處理函數(shù)#include<ctype.h>intisdigit(intc)測(cè)試C是否為十進(jìn)制數(shù)字(是:返回值為真(非零))intisalpha(intc)測(cè)試C是否為字母intisalnum(intc)測(cè)試C是否為字母或數(shù)字intislower(intc)測(cè)試C是否為小寫(xiě)字母intisupper(intc)測(cè)試C是否為大寫(xiě)字母inttolower(intc)將字符C轉(zhuǎn)換成小寫(xiě)字符inttoupper(intc)將字符C轉(zhuǎn)換成大寫(xiě)字符intisspace(intc)測(cè)試C是否為空白intiscsym(intc)測(cè)試C是否為字母、下劃線或數(shù)字intiscntrl(intc)測(cè)試C是否為控制字符intispunct(intc)測(cè)試C是否為標(biāo)點(diǎn)符號(hào)intisgraph(intc)測(cè)試C是否為可打印字符intisprint(intc)判斷C是否為可打印字符字符處理函數(shù)#include<ctype.h>【例10.8】輸入一行字符,統(tǒng)計(jì)其中的英文字符、數(shù)字字符、空格和其它字符的個(gè)數(shù)。#include<stdio.h>#defineN80intmain(){ charstr[N]; inti,letter=0,digit=0,space=0,others=0; printf("Inputastring:"); gets(str);

for(i=0;str[i]!='\0';i++) { if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z') letter++; /*統(tǒng)計(jì)英文字符*/ elseif(str[i]>='0'&&str[i]<='9') digit++; /*統(tǒng)計(jì)數(shù)字字符*/ elseif(str[i]=='') space++; /*統(tǒng)計(jì)空格*/ else others++; /*統(tǒng)計(jì)其他字符*/}

不用字符處理函數(shù)實(shí)現(xiàn)【例10.8】輸入一行字符,統(tǒng)計(jì)其中的英文字符、數(shù)字字符、空printf("Englishcharacter:%d\n",letter); printf("digitcharacter:%d\n",digit); printf("space:%d\n",space); printf("othercharacter:%d\n",others); return0;}printf("Englishcharacter:%d\用字符處理函數(shù)實(shí)現(xiàn)

#include<stdio.h>#defineN80intmain(){ charstr[N]; inti,letter=0,digit=0,space=0,others=0; printf("Inputastring:"); gets(str);

for(i=0;str[i]!='\0';i++) { if(isalpha(str[i])) letter++; /*統(tǒng)計(jì)英文字符*/ elseif(isdigit(str[i])) digit++; /*統(tǒng)計(jì)數(shù)字字符*/ elseif(isspace(str[i])) space++; /*統(tǒng)計(jì)空格*/ else others++; /*統(tǒng)計(jì)其他字符*/}

用字符處理函數(shù)實(shí)現(xiàn)【例10.9】輸入一個(gè)人的名和姓,然后將名和姓的第一個(gè)字幕都變成大寫(xiě)字母。

#include<stdio.h>#include<ctype.h>#defineN80intmain(){ charname[N]; inti; printf("Inputaname:"); gets(name);/*輸入名和姓*/name[0]=toupper(name[0]);/*名的首字母變大寫(xiě)*/ i=1;while(!isspace(name[i]))/*跳過(guò)所有字母,直到遇空格為止*/ { i++; }

【例10.9】輸入一個(gè)人的名和姓,然后將名和姓的第一個(gè)字幕都while(!isalpha(name[i]))/*跳過(guò)所有空格,遇到字母為止*/ { i++; }name[i]=toupper(name[i]);/*將名的首字母變?yōu)榇髮?xiě)*/ printf("FormattedName:%s\n",name); return0;}while(!isalpha(name[i]))/*跳過(guò)【例10.9】輸入一個(gè)人的名和姓,然后將名和姓的第一個(gè)字幕都變成大寫(xiě)字母。

#include<stdio.h>#include<ctype.h>#defineN80intmain(){ charname[N]; inti; printf("Inputaname:"); gets(name);/*輸入名和姓*/ i=0;

while(!isalpha(name[i]))/*跳過(guò)所有空格,遇到字母為止*/ { i++; }【例10.9】輸入一個(gè)人的名和姓,然后將名和姓的第一個(gè)字幕都name[i]=toupper(name[i]);/*將名的首字母變?yōu)榇髮?xiě)*/while(!isspace(name[i]))/*跳過(guò)所有字母,直到遇空格為止*/ { i++; }while(!isalpha(name[i]))/*跳過(guò)所有空格,直到遇字母為止*/ { i++; } name[i]=toupper(name[i]);/*將姓的首字母變?yōu)榇髮?xiě)*/ printf("FormattedName:%s\n",name); return0;}name[i]=toupper(name[i]);/*習(xí)題:1、填空1)計(jì)算指針p所指向的字符串的長(zhǎng)度unsignedintMyStrlen(char*p){unsignedintlen;for(;*p!=;p++){len;}return;}習(xí)題:2)計(jì)算字符數(shù)組s中字符串長(zhǎng)度。方法與1)不同

unsignedintMyStrlen(chars[]){char*p=s;while(*p!=

){p++;}/*移動(dòng)指針使其指向結(jié)束標(biāo)志*/return

;/*返回指針p與字符串首地址

之間的差值*/}2)計(jì)算字符數(shù)組s中字符串長(zhǎng)度。方法與1)不同unsign3)比較兩字符串大小,將字符串中第1個(gè)出現(xiàn)的不相同字符的ASCII碼值之差作為比較結(jié)果返回。若第1個(gè)字符串大于(小于)第2個(gè)字符串,返回正值(負(fù)值);相同,則返回0。intMyStrcmp(char*p1,char*p2){for(;

溫馨提示

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