C語言字串函式及如何實現這些函式

2021-10-08 14:21:34 字數 3706 閱讀 1239

​ 近期在複習c語言字串相關的知識,在**了 翁愷 老師的 c語言程式設計 課程後,打算對c語言標準庫以及 string.h 內的函式進行整理,並寫出自己的實現方式(部分函式涉及系統底層和複雜操作,只給出簡單的c語言表示形式,陣列同樣可以做出相應的函式,但本文以指標角度進行闡釋)。有不足之處還請大神指正。

函式原型:int putchar( int c )

函式作用:向標準輸出輸出乙個字元

函式的返回值:

#include

#undef putchar

intmyputchar

(int c)

函式原型:int putchar( void )

函式作用:向標準輸出讀入乙個字元

函式的返回值:

函式原型: *size_t strlen( const char s )

函式作用:返回s的字串長度

函式的返回值:整數,表示s的字串長度,字串結尾的『\0』不計入長度。

函式的自實現

int

mystrlen

(const

char

*s)return len;

}//使用指標實現

函式原型: **int strcmp( const char s1, const char s2 )

函式作用:比較兩個字串,並返回值

函式的返回值:

函式的自實現

int

mystrcmp

(const

char

*s1,

const

char

*s2)

return

*s1 -

*s2;

}//使用指標實現

函式原型: **char *strcpy(char restrict dst, const restrict src)

函式作用:將src的字串拷貝到dst(注: 關鍵字restrict表示src和dst不重疊(在記憶體中的儲存位置不重疊)(c99))並返回dst

函式的返回值:dst (返回值是為了使該函式能夠參與到其他運算中去)

//使用示例:複製乙個字串

char

*dst =

(char*)

malloc

(strlen

(src)+1

);//strlen不包含結尾』/0『的長度,需要在返回值上+1單位長度

strcpy

(dst,src)

;

函式的自實現

char

*mystrcpy

(char

*dst,

const

char

*src)

*dst =

'\0'

;return dst;

}//使用指標實現

//在 翁愷 老師的課程中提及此函式有更簡潔的表達方式(不影響編譯和實際效率)

char

*mystrcpy

(char

*dst,

const

char

*src)

函式原型: **char *strcpy(char restrict s1, const restrict s2)

函式作用:將s2拷貝到s1的後面,將二者拼接為乙個長的字串並返回s1

函式的返回值:s1 (必須保證s1具有足夠的空間)

函式的自實現

char

*mystrcat

(char

*s1,

const

char

*s2)

//使用指標實現

函式原型: **char strchr(const char s, int c)

函式作用:從左向右搜尋指定字元

函式原型:**char strrchr(const char s, int c)

函式的返回值:從左/右向右/左搜尋指定字元

函式的自實現

char

*mystrchr

(const

char

*s,int c)

//使用指標實現

//(ps:如有更優解決方案請指出,我在嘗試將s++寫進while判斷條件裡的時候遇到了一些問題:)

// while(*s++ != c && *s++ != '\0');

//此語句在執行過程中遇到一些奇怪的問題,比如一些字元(如'e')無法搜尋到,而其他字元能夠正常搜尋到,暫未深究...

//mystrrchr省略,原理大致相同

函式原型: **char *strstr(const char s1, const char s2)

函式作用:搜尋指定字串(在s1中搜尋s2)

函式原型: **char *strcasestr(const char s1, const char s2)

函式作用:忽略大小寫搜尋指定字串(在s1中搜尋s2)

函式的返回值:

char

*strstr

(const

char

*s1,

const

char

*s2)

return

null;}

//使用指標實現,由於展開再寫一遍搜尋函式無意義,先使用string.h裡的部分函式(具體實現方法見前文)

①strncpy
函式原型: **char *strncpy(char restrict dst, char restrict src, size_t n)

②strncat
函式原型: **char *strncat(char restrict s1, char restrict s2, size_t n)

③strncmp
函式原型: **int strncpy(char restrict s1, char restrict s2, size_t n)

參數列中的n表示限制實操的字串長度為n

C語言 字串庫函式實現

對於字串,編譯器為我們提供了一些庫函式以方便我們對其的操作,下面我們將對一些常用的字串庫函式進行簡單介紹,並自我實現這些方法。1 strcopy 函式原型 char strcpy char dest,const char src 說明 src和dest所指記憶體區域不可以重疊且dest必須有足夠的空...

C語言字串操作函式實現

1 字串反轉 strrev void strrev char str 2 字串複製 strcpy char strcpy char strdest,const char strstr return strdest 3 字串拼接 strcat char strcat char strdest,cons...

c語言 字串函式

c語言中的字串函式 主要是兩大類,一類是拷貝的,一類是比較的,另乙個就是其他的 拷貝的有 1.strcpy 函式原型 char strcpy char strdestination,const char strsource 函式功能 將strsource的內容拷貝到strdestination中去,...