C語(yǔ)言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn)
前言:
今天來(lái)實(shí)現(xiàn)strlen、strcpy、strcmp、strcat、strstr三個(gè)比較常見(jiàn)的字符串操作函數(shù),具體實(shí)現(xiàn)如下。
strlen
C 庫(kù)函數(shù) size_t strlen(const char *str) 計(jì)算字符串 str 的長(zhǎng)度,直到空結(jié)束字符,但不包括空結(jié)束字符。
int my_strlen(const char* p) {
int size = 0;
//找到末尾停止
while (*p != '\0') {
p++;
size++;
}
return size;
}strcpy
C 庫(kù)函數(shù) char *strcpy(char *dest, const char *src) 把 src 所指向的字符串復(fù)制到 dest。需要注意的是如果目標(biāo)數(shù)組 dest 不夠大,而源字符串的長(zhǎng)度又太長(zhǎng),可能會(huì)造成緩沖溢出的情況。
char* my_strcpy(char* dest, const char* src) {
//判斷傳入是否為空
if (src == NULL || dest == NULL) {
return dest;
}
char* pdest = dest;
//不為空打印
while (*src != '\0') {
*pdest = *src;
pdest++;
src++;
}
//末尾加'\0'
*pdest = '\0';
return dest;
}strcmp
C 庫(kù)函數(shù) int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串進(jìn)行比較。
int my_strcmp(const char* str1, const char* str2) {
//一直往后查找直到其中一個(gè)結(jié)尾或者他們二者不相等為止
while (*str1 != '\0' && *str2 != '\0' && (*str1 == *str2)) {
str1++;
str2++;
}
return *str1 - *str2;
}strcat
C 庫(kù)函數(shù) char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的結(jié)尾。
char* my_strcat(char* dest, const char* src) {
char* pdest = dest;
//pdset先走到末尾
while (*pdest != '\0') {
pdest++;
}
//鏈接
while (*src != '\0') {
*pdest = *src;
pdest++;
src++;
}
//加結(jié)尾標(biāo)志'\0'
*pdest = '\0';
return dest;
}strstr
C 庫(kù)函數(shù) char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出現(xiàn)字符串 needle 的位置,不包含終止符 ‘\0’。
char* my_strstr(const char* dest, const char* src) {
//斷言非空
assert(dest && src);
while (*dest != '\0') {
//記錄dest src初始位置
char* pdest = dest;
char* psrc = src;
//若相等則繼續(xù)比較
while (*pdest == *psrc || *psrc == '\0') {
//如果psrc=='\0' 則說(shuō)明找到子串
if (*psrc == '\0') {
return dest;
}
//psrc 未到 \0 則繼續(xù)比較是否相等
pdest++;
psrc++;
}
dest++;
}
return NULL;
}到此這篇關(guān)于C語(yǔ)言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C語(yǔ)言字符串操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VisualStudio2022 cmake配置opencv開(kāi)發(fā)環(huán)境
本文主要介紹了VisualStudio2022 cmake配置opencv開(kāi)發(fā)環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
VC++中HTControl的CHTButton按鈕控件類用法實(shí)例解析
這篇文章主要介紹了VC++中HTControl的CHTButton按鈕控件類用法,對(duì)于大家進(jìn)行VC++項(xiàng)目開(kāi)發(fā)有一定的幫助作用,需要的朋友可以參考下2014-08-08
C語(yǔ)言實(shí)現(xiàn)宿舍管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)宿舍管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
java 中ArrayList與LinkedList性能比較
這篇文章主要介紹了java 中ArrayList與LinkedList性能比較的相關(guān)資料,需要的朋友可以參考下2017-03-03
C++中volatile關(guān)鍵字的使用詳解以及常見(jiàn)的誤解
volatile 關(guān)鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如:操作系統(tǒng),硬件或者其他線程等2020-01-01

