C語(yǔ)言三個(gè)函數(shù)的模擬實(shí)現(xiàn)詳解
一、strcpy
//模擬實(shí)現(xiàn)strcpy
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char*dest, char*str)
{
assert(dest && str);
char* tmp = dest;
while (*str != '\0')
{
*dest = *str;
dest++;
str++;
}
*dest = '\0';
return tmp;
}
int main()
{
char arr1[20] = "xxxxxxxxxxxxxxx";
char arr2[] = "study hard!";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
二、模擬實(shí)現(xiàn)strcat
思路:先找到目標(biāo)字符串的\0位置,然后停下
用兩個(gè)指針掃描目標(biāo)字符串和源字符串,并賦值
在源字符串添加完成后,加上’\0‘
//模擬實(shí)現(xiàn)strcat
//字符串追加
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* str)
{
assert(dest && str);
char* tmp = dest;
//找到目標(biāo)的尾巴
while (*dest != '\0')
{
dest++;
}
//鏈接字符串
while (*dest++ = *str++)
{
;
}
*dest = '\0';
return tmp;
}
int main()
{
char arr1[20] = "hello";
char arr2[] = " world!";
my_strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
三、strcmp
要注意,strcmp不是比較兩字符串的長(zhǎng)度,而是逐位比較字符的ASCII碼值
//模擬實(shí)現(xiàn)strcmp 返回的不是1 -1,而是正數(shù),負(fù)數(shù)
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
assert(str1&&str2);
while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
return *str1 - *str2;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcder";
int ret=my_strcmp(arr1, arr2);
if (ret < 0)
{
printf("<\n");
}
else if (ret == 0)
{
printf("=\n");
}
else
{
printf(">\n");
}
return 0;
}
總結(jié):
多多實(shí)現(xiàn)庫(kù)函數(shù)的模擬可以更好地認(rèn)識(shí)指針。
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C/C++寬窄字符轉(zhuǎn)換與輸出的多種實(shí)現(xiàn)方法
本文主要介紹了C/C++寬窄字符轉(zhuǎn)換與輸出的多種實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
C語(yǔ)言去除相鄰重復(fù)字符函數(shù)的實(shí)現(xiàn)方法
這篇文章主要介紹了C語(yǔ)言去除相鄰重復(fù)字符函數(shù)的實(shí)現(xiàn)方法的相關(guān)資料,實(shí)現(xiàn)去重字符串相鄰重復(fù)的字符,不相鄰的不用去重的功能,需要的朋友可以參考下2017-08-08
OpenCV圖像處理之實(shí)現(xiàn)圖像膨脹腐蝕操作
圖像形態(tài)學(xué)操作是指基于形狀的一系列圖像處理操作的合集,主要是基于集合論基礎(chǔ)上的形態(tài)學(xué)數(shù)學(xué)對(duì)圖像進(jìn)行處理。本文將為大家介紹一下如何利用OpenCV實(shí)現(xiàn)其中的腐蝕和膨脹操作,需要的可以參考一下2022-09-09
C語(yǔ)言實(shí)現(xiàn)數(shù)獨(dú)小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)數(shù)獨(dú)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
C++實(shí)現(xiàn)水仙花數(shù)判斷實(shí)例
大家好,本篇文章主要講的是C++實(shí)現(xiàn)水仙花數(shù)判斷實(shí)例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01
優(yōu)先隊(duì)列(priority_queue)的C語(yǔ)言實(shí)現(xiàn)代碼
本文簡(jiǎn)要介紹一種基于數(shù)組二叉堆實(shí)現(xiàn)的優(yōu)先隊(duì)列,定義的數(shù)據(jù)結(jié)構(gòu)和實(shí)現(xiàn)的函數(shù)接口說(shuō)明如下2013-10-10

