C語言詳細講解strcpystrcatstrcmp函數(shù)的模擬實現(xiàn)_第1頁
C語言詳細講解strcpystrcatstrcmp函數(shù)的模擬實現(xiàn)_第2頁
C語言詳細講解strcpystrcatstrcmp函數(shù)的模擬實現(xiàn)_第3頁
C語言詳細講解strcpystrcatstrcmp函數(shù)的模擬實現(xiàn)_第4頁
C語言詳細講解strcpystrcatstrcmp函數(shù)的模擬實現(xiàn)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第C語言詳細講解strcpystrcatstrcmp函數(shù)的模擬實現(xiàn)目錄一、模擬實現(xiàn)strcpy函數(shù)二、模擬實現(xiàn)strcat函數(shù)三、模擬實現(xiàn)strcmp函數(shù)四、小結(jié)

一、模擬實現(xiàn)strcpy函數(shù)

strcpy函數(shù)是字符串拷貝函數(shù),就是將源字符串拷貝到目標空間中。

char*strcpy(char*destination,constchar*source);//庫函數(shù)中的聲明

將源(source)指向的c字符串復制到目標(destination)指向的數(shù)組中,包括終止的空字符(并在該點停止)。

為避免溢出,目標(destination)指向的數(shù)組的大小應足夠長,以包含與源相同的C字符串(包括終止的空字符),并且在內(nèi)存中不應與源重疊。

在這里需要注意:

1、源字符串必須以\0結(jié)束。

2、會將源字符串中的\0拷貝到目標空間。

3、目標空間必須足夠大,以確保能存放源字符串。

4、目標空間必須可變。

下面就用my_strcpy來模擬實現(xiàn)stcpy函數(shù)。

#includestdio.h

#includeassert.h//assert的頭文件

char*my_strcpy(char*dest,constchar*src)//這里用const修飾所指向的源字符串,因為源字符串是

//常量字符串,不能被修改

char*ret=dest;

assert(dest);//斷言源字符串和目標空間都不能為空指針

assert(src);

while(*dest++=*src++)//一個字符串一個字符串的拷貝,遇到'\0'結(jié)束

returnret;//返回目標空間的起始地址

intmain()

chararr1[20]={0};

chararr2[]="hello";

printf("%s",my_strcnpy(arr1,arr2));

return0;

}

以上是整個字符串的拷貝,如果我們不拷貝整個字符串,只拷貝字符串里面的幾個字符,我們可以怎么做呢?接下來我們來看看strncpy這個函數(shù),這個函數(shù)可以實現(xiàn)只拷貝字符串里面的幾個字符。這個函數(shù)的模擬實現(xiàn)大體上跟strcpy函數(shù)是一樣的,只是這里有了長度限制,接下來用my_strncpy來模擬實現(xiàn)。

#includestdio.h

#includeassert.h

char*my_strcnpy(char*dest,constchar*src,size_tn)

char*ret=dest;

assert(dest);

assert(src);

inti=0;

for(i=0;ii++)//要拷貝幾個字符,循環(huán)幾次

*dest++=*src++;

returnret;

intmain()

chararr1[20]={0};

chararr2[]="hello";

printf("%s",my_strcnpy(arr1,arr2,3));//3就是我們要拷貝的字符串的大小,這里就相當于將前三個字符hel進行拷貝(這里也可以將整個字符串拷貝,只要知道大?。?/p>

return0;

}

二、模擬實現(xiàn)strcat函數(shù)

strcat是連接字符串函數(shù),它的作用是將源字符串附加到目標字符串。目標中終止的空字符被源字符串中的第一個字符覆蓋,空字符包含在由目標中的兩個字符串聯(lián)而成的新字符串的末尾。

char*strcat(char*destination,constchar*source);//庫函數(shù)中的聲明

在這里需要注意:

1、源字符串必須以\0結(jié)束,目的地也必須以\0結(jié)束

2、目標空間必須有足夠的大,能容納下源字符串的內(nèi)容。

3、目標空間必須可修改。

下面就用my_strcat來模擬實現(xiàn)strcat函數(shù)。

#includestdio.h

#includeassert.h

char*my_strcat(char*dest,constchar*src)這里用const修飾所指向的源字符串,因為源字符串是

//常量字符串,不能被修改

char*ret=dest;

assert(dest);

assert(src);

while(*dest!='\0')\\找到目標空間的結(jié)束標志處,然后開始連接

dest++;

while(*dest++=*src++)

returnret;//返回目標空間的起始地址

intmain()

chararr1[20]="abc";

chararr2[]="def";

printf("%s\n",my_strncat(arr1,arr2));

return0;

}

對于字符串連接還有一個函數(shù)strncat也能描述,但是這個函數(shù)是有長度限制的,可以連接一個字符串里面的幾個字符或者整個字符串。下面就用my_strncat來模擬實現(xiàn)strcat函數(shù)。

#includestdio.h

#includeassert.h

char*my_strncat(char*dest,constchar*src,size_tn)

char*ret=dest;

assert(dest);

assert(src);

inti=0;

while(*dest!='\0')\\找到目標空間的結(jié)束標志處,然后開始連接

dest++;

for(i=0;ii++)//要連接幾個字符,循環(huán)幾次

*dest++=*src++;

returnret;//返回目標空間的起始地址

intmain()

chararr1[20]="abc";

chararr2[]="def";

printf("%s\n",my_strncat(arr1,arr2,2));//需要連接幾個字符串,就將它們的大小傳過去,這里這里的2就是字符串里面"de"的大小,將"de"兩個字符傳過去

return0;

}

三、模擬實現(xiàn)strcmp函數(shù)

strcmp是字符串比較函數(shù),比較兩個字符串str1和str2,此函數(shù)開始比較每個字符串的第一個字符。如果它們彼此相等,則繼續(xù)往下比,直到字符不同或到達終止的空字符。

intstrcmp(constchar*str1,constchar*str2);//庫函數(shù)中的聲明

第一個字符串大于第二個字符串,則返回大于0的數(shù)字

第一個字符串等于第二個字符串,則返回0

第一個字符串小于第二個字符串,則返回小于0的數(shù)字

下面用my_strcmp來模擬實現(xiàn)strcmp函數(shù):

#includestdio.h

#includeassert.h

intmy_strcmp(constchar*str1,constchar*str2)

assert(str1);

assert(str2);

while(*str1==*str2)//先看首字符如果這兩個字符是否相等,如果相等繼續(xù)往下比,不相等跳出去比較大小

if(*str1=='\0')//判斷是否已經(jīng)比完了所有字符,如果已經(jīng)比完了返回0,說明這兩個字符串相等

return0;

else//如果沒有比完,繼續(xù)往下一個比

str1++;

str2++;

//如果兩個字符不相等,那就比大小,返回大于0的數(shù)則說明str1str2,反之小于。

return*str1-*str2;

intmain()

chararr1[20]="abcefg";

chararr2[]="efghij";

intret=my_strcmp(arr1,arr2);

if(ret0)

printf("大于\n");

elseif(ret0)

printf("小于\n");

else

printf("等于\n");

return0;

}

有長度限制的比較函數(shù)strncmp,下面用my_strncmp模擬實現(xiàn):

#includestdio.h

#includeassert.h

intmy_strncmp(constchar*str1,constchar*str2,intn)

inti=0;

for(i=0;ii++)//需要比較幾個字符循環(huán)幾次

if(*(str1+i)==*(str2+i))//先看首字符如果這兩個字符是否相等,如果相等繼續(xù)往下比,不相等跳出去比較大小

if(*str1=='\0')//判斷是否已經(jīng)比完了所有字符,如果已經(jīng)比完了返回0,說明這兩個字符串相等

return0;

else//如果沒有比完,繼續(xù)往下一個比

str1++;

str2++;

//如果兩個字符不相等,那就比大小,返回大于0的數(shù)則說明str1str2,反之小于。

return*str1-*str2;

intmain()

chararr1[20]="abcefg";

chararr2[]="efghij";

intret=my_strncmp(arr1,arr2,2);

if

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論