模擬實現str函式

2021-08-19 08:21:55 字數 1871 閱讀 9479

字串是乙個重要的資料型別,但是c語言並沒有顯式的字串資料型別,因為字串以字元常量的形式儲存在字元陣列之中。接下來我將要模擬實現處理字串的庫函式:strlen,syrcpy,strcat,strstr,strcmp,memcpy。

1、strlen返回乙個int型的資料,是乙個測試字串長度的函式。

這是自己模擬實現strlen的功能

思想:字串都有結束標誌\0,只要遍歷這個字串,知道遇到\0結束,就能輕鬆的獲得字串的長度了

#include 

#include

int my_strlen(const

char* str)

else

}int main()

實現strlen函式的方法有很多,在這裡我就只粘了一種遞迴實現的方法。

2、模擬實現strcpy,表示字串複製函式,但是我覺得這個還是少用為好,因為必須要目的字串給出足夠大的空間,否則會產生不可預料的結果,strncpy比它好用很多,可以自己指定大小。

思想:將src字串複製到dst上,由於dst引數是被修改的,所以他必須是乙個字元陣列或者是乙個指向動態分配記憶體的陣列的指標,不能使用字串常量。新的字串意\結尾,所以老字串剩餘的幾個字元將會被有效地刪除

#include 

#include

#include

char *my_strcpy(char* str1, const

char *str2)

return ret;

}int main()

3、strcat的實現。strcat是把乙個字串新增到另外乙個字串的後面,思想:找到目的字串的末尾將源字串的乙份拷貝新增到這個位置。

#include 

#include

#include

char *my_strcat(char *dest, const

char *src)

while ((*dest++ = *src++))

return ret;

}int main()

4、字串比較函式。

思想:比較兩個字串就是對兩個字串的字元逐個進行比較,知道發現不匹配位置。由於strcmp不改變任何乙個引數,所以不存在溢位字元陣列的缺點,但是strcmp的引數必須要有結束標誌符結尾,否則strcmp就有可能對引數後面的內容進行比較,這樣得出來的結果沒什麼意義。

#include 

#include

#include

int my_strcmp(const

char* dst, const

char* src)

if (ret > 0)

return

1; else

if (ret < 0)

return -1;

return ret;

}int main()

5、模擬實現memcpy函式。

由於字串函式遇到第乙個nul位元組將停止工作,這就要求字串內部不能包含任何nul位元組,但是字串內部包含nul位元組的情況很常見,所以我們使用記憶體操作來解決這個問題。memcpy可以複製源字串的n個位元組到目的字串中,使用這種方法可以複製任何型別的值;具體操作如下:

#include 

#include

void* my_memcpy(void* str1, const

void* str2, size_t c)

return ret;

}int main()

簡單c之模擬實現str類函式

1.模擬實現strcpy include include char my strcpy char arr,const char p int main 2.模擬實現strcat 連線字串函式 include include char my strcat char arr,const char str ...

模擬實現str系列和mem系列庫函式

1.實現strcpy 拷貝字串 char my strcpy char dest,const char src return ret 注意 strcpy會將 0也拷貝,但是需要注意目標位址有足夠的空間進行拷貝。2.實現strcat 字串追加。strcat也會把src的 0拷貝到末尾,需要保證空間足夠...

用C語言模擬實現str和mem相關函式

str開頭的函式只能用於字元資料的操作,遇到null 0 會停止。mem開頭的函式用於操作記憶體內容,可以處理null.操作的基本單位是位元組操作 1.str和mem對比例項 例如 strcpy和memcpy操作 模擬strcpy include include includechar my str...