實(shí)現(xiàn)C語(yǔ)言常用字符串庫(kù)函數(shù)
strlen
數(shù)組長(zhǎng)度的計(jì)算是通過(guò)strlen來(lái)的,它的作用就是判斷給定的數(shù)組元素個(gè)數(shù),直到碰到\0結(jié)束
函數(shù)原型
size_t strlen ( const char * str );
廢話少說(shuō),直接上代碼
int my_strlen(char *str)
{
char* ch=str;
int count=0;
while(*ch!='\0')
{
count++;
ch++;
}
return count;
}
但考慮到安全性,因?yàn)榍箝L(zhǎng)度并不會(huì)改變?cè)醋址?,所以加上const修飾char,保證該字符串的內(nèi)容不能被修改,但是可以改變指向
int my_strlen(const char *str)
{
char* ch=str;
int count=0;
while(*ch!='\0')
{
count++;
ch++;
}
return count;
}
strcpy
strcpy是將一個(gè)字符串含\0整體拷貝到另一個(gè)字符串中
原型為
char * strcpy ( char * destination, const char * source );
void my_strcpy(char* dest,const char *src)
{
char * ch=src;
while(*ch!='\0')
{
*dest=*ch;
dest++;
ch++;
}
*dest='\0';
}
同理不改變?cè)址?,所以加上const修飾。在最后記得手動(dòng)給目的字符串加上\0,這樣才能保證輸出正確
strcat
原型
char * strcat ( char * destination, const char * source );
void my_strcat(char* dest,const char *src)
{
char * ch=dest;
while(*ch!='\0')ch++;
while(*src!='\0')
{
*ch=*src;
ch++;
src++;
}
*ch='\0';
}
先遍歷跑完目的字符串,接著再將原字符串所指的值一一賦給目的字符串.而因?yàn)槭前言釉谀康淖址螅阅康淖址銐虼?/p>
strcmp
原型
int strcmp ( const char * str1, const char * str2 );
int my_strcmp(const char* str1,const char *str2)
{
assert(str1);
assert(str2);
char * s1=str1;
char * s2=str2;
while(*s1==*s2)
{
if(*s1=='\0')
{
return 0;
}
s1++;
s2++;
}
if(*s1>*s2)
{
return 1;
}
else
{
return -1;
}
}
上面代碼最后可以簡(jiǎn)化為return *s1-*s2,不過(guò)主函數(shù)里要相應(yīng)更改了
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易三子棋
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易三子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
C++學(xué)習(xí)筆記std::vector底層原理及擴(kuò)容
這篇文章主要為大家介紹了C++學(xué)習(xí)之std::vector底層原理及擴(kuò)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Cocos2d-x中使用CCScrollView來(lái)實(shí)現(xiàn)關(guān)卡選擇實(shí)例
這篇文章主要介紹了Cocos2d-x中使用CCScrollView來(lái)實(shí)現(xiàn)關(guān)卡的選擇實(shí)例,本文在代碼中用大量注釋講解了CCScrollView的使用,需要的朋友可以參考下2014-09-09
C語(yǔ)言詳解float類型在內(nèi)存中的存儲(chǔ)方式
在c語(yǔ)言中float函數(shù)是單精度的。它在內(nèi)存中以二進(jìn)制的形式存儲(chǔ)。分為符號(hào)位,階碼與尾數(shù)三部分,下面我們?cè)敿?xì)來(lái)了解一下2022-04-04
C語(yǔ)言從txt文件中逐行讀入數(shù)據(jù)存到數(shù)組中的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇C語(yǔ)言從txt文件中逐行讀入數(shù)據(jù)存到數(shù)組中的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
Visual Studio 2019 DLL動(dòng)態(tài)庫(kù)連接實(shí)例(圖文教程)
這篇文章主要介紹了Visual Studio 2019 DLL動(dòng)態(tài)庫(kù)連接實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(AVL樹)實(shí)現(xiàn)方法示例
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(AVL樹)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了C語(yǔ)言平衡二叉樹的相關(guān)定義與使用技巧,需要的朋友可以參考下2018-01-01
C語(yǔ)言學(xué)習(xí)之鏈表的實(shí)現(xiàn)詳解
鏈表是一種物理存儲(chǔ)結(jié)構(gòu)上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過(guò)鏈表中的指針鏈接次序?qū)崿F(xiàn)的。這篇文章主要介紹了C語(yǔ)言中鏈表的實(shí)現(xiàn),需要的可以參考一下2022-11-11

