???????
目錄
1. 標(biāo)準(zhǔn)字符串操作函數(shù)自定義實(shí)現(xiàn)
(a) 自定義strcpy函數(shù)
(b) 自定義strcat函數(shù)
(c) 自定義strcmp函數(shù)
2. 限定長(zhǎng)度字符串操作函數(shù)自定義實(shí)現(xiàn)
(a) 自定義strncpy函數(shù)
(b) 自定義strncat函數(shù)
(c) 自定義strncmp函數(shù)
?對(duì)字符串的操作是不可或缺的一部分。標(biāo)準(zhǔn)庫(kù)提供了如strcpy、strcat、strcmp等基礎(chǔ)字符串處理函數(shù),以及它們的“限定長(zhǎng)度”版本strncpy、strncat和strncmp。為了深入理解這些函數(shù)的工作原理,我們首先將分別展示其標(biāo)準(zhǔn)版自定義實(shí)現(xiàn),然后探討它們的限定長(zhǎng)度版本。
1. 標(biāo)準(zhǔn)字符串操作函數(shù)自定義實(shí)現(xiàn)
(a) 自定義strcpy函數(shù)
char* my_strcpy(char *dest, const char *src) {
assert(dest != NULL);
assert(src != NULL);
char* set = dest;
while (*dest++ = *src++)
;
return set;
}
my_strcpy
函數(shù)負(fù)責(zé)完整地將源字符串src
復(fù)制到目標(biāo)字符串dest
中,并確保包含結(jié)束符\0
。
(b) 自定義strcat函數(shù)
void my_strcat(char *dest, const char *src) {
char* set = dest;
while (*dest != '\0') {
dest++;
}
while ((*dest++ = *src++) != '\0')
;
return set;
}
my_strcat
函數(shù)將源字符串src
追加到目標(biāo)字符串dest
的末尾,同樣確保結(jié)果字符串以\0
結(jié)束。
(c) 自定義strcmp函數(shù)
int my_strcmp(char* dest, char* src) {
while (*dest == *src) {
if (*dest == '\0') {
return 0;
}
dest++;
src++;
}
return (*dest > *src) - (*dest < *src);
}
my_strcmp
用于比較兩個(gè)字符串的內(nèi)容,根據(jù)字典順序返回整數(shù)值:相等則為0,dest
大于src
時(shí)為正數(shù),反之為負(fù)數(shù)。
2. 限定長(zhǎng)度字符串操作函數(shù)自定義實(shí)現(xiàn)
(a) 自定義strncpy函數(shù)
void my_strncpy(char *dest, char* src, int count) {
assert(*dest && *src);
char* set = dest;
while (count-- && (*dest++ = *src++))
;
if (count >= 0) {
*dest = '\0';
}
return dest;
}
my_strncpy
函數(shù)僅復(fù)制源字符串src
最多count
個(gè)字符到目標(biāo)字符串dest
中,如果src
的字符數(shù)量小于count
,則剩余空間填充'\0'。
(b) 自定義strncat函數(shù)
void my_strncat(char* dest, char* src, int count) {
assert(*dest && *src);
char* set = dest;
while (*dest != '\0') {
dest++;
}
while (count-- && (*dest++ = *src++))
;
if (count >= 0) {
*dest = '\0';
}
return set;
}
my_strncat
函數(shù)將源字符串src
最多count
個(gè)字符追加到目標(biāo)字符串dest
末尾,并確保結(jié)果字符串以'\0'結(jié)束。
(c) 自定義strncmp函數(shù)
int my_strncmp(const char* dest, const char* src, int count) {
assert(dest && src);
int i = 0;
while (i < count && *dest == *src && *dest != '\0') {
i++;
dest++;
src++;
}
if (i == count || *dest == '\0' || *src == '\0') {
return 0;
}
else {
return *dest - *src;
}
}
my_strncmp
函數(shù)比較兩個(gè)字符串的前count
個(gè)字符,當(dāng)達(dá)到指定字符數(shù)或遇到任一字符串的結(jié)束符時(shí)停止比較,并返回相應(yīng)的字符差值。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-809782.html
????????在主函數(shù)(main)中,通過(guò)實(shí)際調(diào)用這些自定義函數(shù)并對(duì)比C標(biāo)準(zhǔn)庫(kù)函數(shù),我們可以驗(yàn)證它們的功能正確性,并進(jìn)一步掌握字符串操作函數(shù)的底層邏輯。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-809782.html
到了這里,關(guān)于C語(yǔ)言中的字符串操作函數(shù)自定義實(shí)現(xiàn):標(biāo)準(zhǔn)版與限定長(zhǎng)度版的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!