C語(yǔ)言字符串函數(shù)操作(strlen,strcpy,strcat,strcmp)詳解
一.strlen函數(shù)模擬
字符串以‘\0’作為結(jié)束標(biāo)志,strlen函數(shù)返回的是在字符串中‘\0’前面出現(xiàn)的字符個(gè)數(shù)(不包括‘\0’);
有三種方法可以實(shí)現(xiàn)該操作:
①計(jì)數(shù)器方式
②不能創(chuàng)建臨時(shí)變量計(jì)數(shù)器
③指針-指針
方法一:計(jì)數(shù)器方式
int my_strlen(const char* str) { int count = 0;//定義count用來(lái)記錄字符串?dāng)?shù)組中字符數(shù) while (*str) { count++; str++; } return count; }
方法二:不能創(chuàng)建臨時(shí)變量計(jì)數(shù)器
int my_strlen1(const char* str)//以遞歸的方式完成字符串長(zhǎng)度函數(shù)的模擬 { if (*str == '\0') return 0; return 1 + my_strlen1(str + 1); }
方法三:指針-指針
指針相減得到的是兩個(gè)指針之間差距的元素個(gè)數(shù),可以根據(jù)這種方式來(lái)實(shí)現(xiàn)strlen函數(shù)的模擬
int my_strlen2(char* s)//以此方式進(jìn)行模擬時(shí)不能使用靜態(tài)const { char* p = s; while (*p != '\0') p++; return p - s; }
測(cè)試樣例
二. strcpy函數(shù)模擬
將src所指向的字符串包括‘\0’復(fù)制到dest所指向的字符串中
源字符串(src所指向的字符串)必須以‘\0’結(jié)束
目標(biāo)空間需足夠大,以確保能存放源字符串
int main() { char s[10] = { 'a','b','c','d','e','f' }; char s1[10] = { 'c','c','b' }; printf("%s", my_strcpy(s, s1));//將s1中的字符復(fù)制到s空間中 return 0; } char* my_strcpy(char* dest, const char* src) { char* ret = dest; assert(dest != NULL);//斷言 assert(src != NULL);//斷言 while ((*dest++ = *src++)); return ret; }
測(cè)試結(jié)果
最終將s2中以‘\0’為結(jié)束符的字符串復(fù)制到s中
三.strcat函數(shù)模擬
將src所指向的字符串包括‘\0’復(fù)制到dest所指向的字符串后面
源字符串必須以‘\0’結(jié)束
目標(biāo)空間*dest需足夠大,以確保能夠存放源字符串(*src)
char* my_strcat(char* dest, const char* src) { char* ret = dest; assert(dest != NULL); assert(src != NULL); while (*dest)//訪問(wèn)到dest所指向字符串的最后一個(gè)字符位置 { dest++; } while ((*dest++ = *src++));//將src指向的字符串復(fù)制到dest所指向字符串的后面 return ret; }
測(cè)試樣例
將src指向的字符串復(fù)制到dest指向的字符串后面,最終得到結(jié)果
四.strcmp函數(shù)模擬
strcmp函數(shù)的作用是比較字符串,用法如下strcmp(字符串1,字符串2),它會(huì)比較這兩個(gè)字符串:
如果字符串1等于字符串2,strcmp函數(shù)返回0;
如果字符串1小于字符串2,strcmp函數(shù)返回一個(gè)負(fù)值;
如果字符串1大于字符串2,strcmp函數(shù)返回一個(gè)正值.
具體實(shí)現(xiàn)如下:
int my_strcmp(const char* dest, const char* src) { int ret = 0; assert(src != NULL); assert(dest != NULL); while (!(ret = *(unsigned char*)src - *(unsigned char*)dest) && *dest) { ++src; ++dest; } if (ret < 0) ret = -1; else if (ret > 0) ret = 1; return ret; }
總結(jié)
到此這篇關(guān)于C語(yǔ)言字符串函數(shù)操作(strlen,strcpy,strcat,strcmp)詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言字符串函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言中strcpy和strcat的使用和模擬實(shí)現(xiàn)
- C語(yǔ)言string庫(kù)strcpy、strcmp、strcat函數(shù)的使用
- 利用C語(yǔ)言模擬實(shí)現(xiàn)qsort,strcpy,strcat,strcmp函數(shù)
- C語(yǔ)言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn)
- C語(yǔ)言詳細(xì)講解strcpy strcat strcmp函數(shù)的模擬實(shí)現(xiàn)
- 徹底掌握C語(yǔ)言strcat函數(shù)的用法
- C語(yǔ)言 模擬實(shí)現(xiàn)strcpy與strcat函數(shù)詳解
- strcat 函數(shù)的使用指南
- strcat函數(shù)實(shí)現(xiàn)簡(jiǎn)單示例
- c++實(shí)現(xiàn)strcat字符串連接庫(kù)函數(shù)的方法詳解
- c++ 連接兩個(gè)字符串實(shí)現(xiàn)代碼 實(shí)現(xiàn)類(lèi)似strcat功能
- C語(yǔ)言strcat函數(shù)詳解:字符串追加的利器
相關(guān)文章
C++標(biāo)準(zhǔn)庫(kù)封裝的vector數(shù)組
這篇文章主要介紹了C++標(biāo)準(zhǔn)庫(kù)封裝的vector數(shù)組,vector創(chuàng)建的對(duì)象包含眾多封裝好的函數(shù),想了解其相關(guān)資料的小伙伴可以參考下面文章內(nèi)容,希望對(duì)你的學(xué)習(xí)有所幫助2022-03-03C++函數(shù)的嵌套調(diào)用和遞歸調(diào)用學(xué)習(xí)教程
這篇文章主要介紹了C++函數(shù)的嵌套調(diào)用和遞歸調(diào)用學(xué)習(xí)教程,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09C++實(shí)現(xiàn)String與UF8互轉(zhuǎn)
這篇文章介紹了C++實(shí)現(xiàn)String與UF8互轉(zhuǎn)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05C++中 STL list詳解及簡(jiǎn)單實(shí)例
這篇文章主要介紹了C++中 STL list詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04純C語(yǔ)言實(shí)現(xiàn)火車(chē)售票系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了純C語(yǔ)言實(shí)現(xiàn)火車(chē)售票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12C++控制臺(tái)實(shí)現(xiàn)隨機(jī)生成路徑迷宮游戲
這篇文章主要為大家詳細(xì)介紹了C++控制臺(tái)實(shí)現(xiàn)隨機(jī)生成路徑迷宮游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05QT編寫(xiě)地圖實(shí)現(xiàn)獲取區(qū)域邊界
區(qū)域邊界是一些坐標(biāo)點(diǎn)集合,而且不同的行政區(qū)劃得到的區(qū)域邊界點(diǎn)數(shù)組集合個(gè)數(shù)不同。本文將具體介紹QT在編寫(xiě)地圖時(shí)如何實(shí)現(xiàn)獲取區(qū)域邊界,需要的可以參考一下2022-01-01從零學(xué)習(xí)cmake構(gòu)建系統(tǒng)
這篇文章主要為大家介紹了從零學(xué)習(xí)cmake構(gòu)建系統(tǒng)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02