模擬實現庫函式strchr、strrchr、memchr
阿新 • • 發佈:2019-01-06
①strchr函式【函式原型】:char* strchr(constchar* string,int c);【函式功能】:在一個字串中查詢指定字元的第一次出現的位置。如果查詢成功,返回該字元的地址,如果查詢失敗,則返回 NULL。【參考程式碼】:
②strrchr函式【函式原型】:char* strrchr(constchar* string,int c);【函式功能】:在一個字串中查詢指定字元的最後一次出現的位置。 如果查詢成功,返回該字元的地址,如果查詢失敗,則返回 NULL。 【參考程式碼】:#include<stdio.h> #include<assert.h> char *my_strchr(char *str, int ch) { assert(str != NULL); while (*str) { if (*str == ch) { return str; } str++; } } int main() { char *str = "abcdef"; int ch = 'd'; char *ret = my_strchr(str, ch); printf("%s\n", ret); return 0; }
③memchr函式【函式原型】:void *memchr( const void *buf, int c, size_t count );【函式功能】:從buf所指記憶體區域的前count個位元組查詢字元c。如果查詢成功,返回該字元的位置,如果查詢失敗,則返回 NULL。 【參考程式碼】:#include<stdio.h> #include<assert.h> char *my_strrchr(char *str, int ch) { assert(str != NULL); char *ret =NULL; //記錄字元ch出現位置,當迴圈走完,ret正是字元ch最後出現的位置 while (*str) { if(*str == ch) { ret = str; str++; } else { str++; } } return ret; } int main() { char *str = "adcdef"; int ch = 'd'; char *ret = my_strrchr(str, ch); printf("%s\n", ret); return 0; }
void *my_memchr(void *buff, int ch, size_t count) { char *ret = (char *)buff;//強轉為(char *),一個位元組一個位元組找 while (*ret) { if (*ret == (char)ch) { return ret; } else { ret++; } } return NULL;//找不到返回NULL }