字元函式和字串函式及模擬實現

2021-10-10 19:53:41 字數 4403 閱讀 9765

函式介紹

求字串長度

strlen

長度不受限制的字串函式

strcpy

strcat

strcmp

長度受限制的字串函式介紹 strncpy

strncat

strncmp

字串查詢

strstr

strtok

錯誤資訊報告

strerror

字元操作

記憶體操作函式

memcpy

memmove

strlen

size_t strlen ( const char * str );

字串已經 『\0』 作為結束標誌,strlen函式返回的是在字串中 『\0』 前面出現的字元個數(不包含 『\0』 )。

引數指向的字串必須要以 『\0』 結束。

注意函式的返回值為size_t,是無符號的( 易錯 )

strlen函式的模擬實現

//方法一

intmystrlen

(char

*str)

return count;

//方法二

intmystrlen1

(char

* str)

return p - str;

}}

strcpy

char* strcpy(char * destination, const char * source );

源字串必須以 『\0』 結束。

會將源字串中的 『\0』 拷貝到目標空間。

目標空間必須足夠大,以確保能存放源字串。

目標空間必須可變。

strcpy模擬實現

char

*mystrcpy

(char

*dst,

const

char

*src)

stract

char * strcat ( char * destination, const char * source );

源字串必須以』\0』 結束。

目標空間必須有足夠的大,能容納下源字串的內容。

目標空間必須可修改。

stract模擬實現

char

*mystrcat

(char

*dst,

const

char

*src)

while((

*dst++

=*src++))

;return ret;

}

strcmp

int strcmp(const char * str1, const char * str2 );

第乙個字串大於第二個字串,則返回大於0的數字

第乙個字串等於第二個字串,則返回0

第乙個字串小於第二個字串,則返回小於0的數字

strcmp模擬實現

int

mystrcmp

(char

*dst,

char

*src)}if

(*dst >

*src)

else

}

strcnpy

char * strncpy ( char * destination, const char * source, size_t num

);拷貝num個字元從源字串到目標空間。

如果源字串的長度小於num,則拷貝完源字串之後,在目標的後邊追加0,直到num個。

strncat

char * strncat ( char * destination, const char * source, size_t num

);鏈結num個字元從源字串到目標空間,並新增乙個終止null字元。

如果源字串的長度小於num,則只複製到終止符null之前的內容。

strncmp

int strcmp(const char *str1,const char *str2,size_t num);

比較到出現另個字元不一樣或者乙個字串結束或者num個字元全部比較完。

strstr

char * strstr ( const char *, const char * );

返回乙個指向str1中第乙個出現str2的指標,如果str2不是str1中的一部分,則返回乙個空指標。

strstr模擬實現

char

*mystrstr

(char

*str1,

char

*str2)if(

*s2 ==

'\0'

) start++;}

return

null

;}

strtok

char * strtok ( char * str, const char * sep );

sep引數是個字串,定義了用作分隔符的字元集合

第乙個引數指定乙個字串,它包含了0個或者多個由sep字串中乙個或者多個分隔符分割的標記。

strtok函式找到str中的下乙個標記,並將其用 \0 結尾,返回乙個指向這個標記的指標。(注:strtok函式會改

變被操作的字串,所以在使用strtok函式切分的字串一般都是臨時拷貝的內容並且可修改。)

strtok函式的第乙個引數不為 null ,函式將找到str中第乙個標記,strtok函式將儲存它在字串中的位置。

strtok函式的第乙個引數為 null ,函式將在同乙個字串中被儲存的位置開始,查詢下乙個標記。

如果字串中不存在更多的標記,則返回 null 指標。

strerror

char *strerror(int errnum);

返回錯誤碼,所對應的錯誤資訊;

memcpy

void * memcpy ( void * destination, const void * source, size_t num );

函式memcpy從source的位置開始向後複製num個位元組的資料destination的記憶體位置。

這個函式在遇到 '\0』的時候並不會停下來。

如果source和destination有任何的重疊,複製的結果都是未定義的。

memcpy模擬實現

void

*mymemcpy

(void

*dst,

void

*src,

int count)

return ret;

}

memmove

void * memmove ( void * destination, const void * source, size_t num

);和memcpy的差別就是memmove函式處理的源記憶體塊和目標記憶體塊是可以重疊的。

如果源空間和目標空間出現重疊,就得使用memmove函式處理。

memmove模擬實現

void

*mymemmove

(void

*dst,

void

*src,

int count)

}else

}return ret;

}

字元函式和字串函式的模擬實現

strlen 算字串的長度 size t strlen const char str 1.模擬實現strlen include include intmy strlen const char p return count int main strcpy 字串拷貝 char strcpy char d...

模擬實現字串庫函式

1.strcat 1 函式功能 實現兩個字串的連線 2 思想 首先遍歷目標字串,找到 0 的位址,然後將資源字串通過指標一次一次的拼接在目標字串後面,直到指標走到資源字串的 0 3 char mystrcat char strdestination,const char strsource whil...

模擬實現字串查詢函式strstr

題目 不使用庫函式,模擬實現字串查詢函式strstr的功能。例如 在字串dest abcdefg 中查詢字串src bcd 是否存在,如存在返回 bcd 在 abcdefg 中的起始位置,即 bcdefg 若不存在,則返回null。分析 1.首先定義乙個慢指標slow遍歷dest字串,初始指向des...