您好,登錄后才能下訂單哦!
一、strchr()
函數原型:char *strchr( const char *string, int c );
strchr() 函數查找字符在指定字符串中首次出現的位置,如果找到,就返回指定字符在已知字符串中最后一次開始出現的位置,找不到就返回NULL。例如:已知字符串“abdedef”,該函數返回“dedef”
#include<stdio.h> #include<assert.h> #include<stdlib.h> char *my_strchr(const char *str,int c) { assert(str); while(*str) { if(*str == c) return (char *)str; //找到后返回此時的位置 str++; } return NULL; //沒找到 } int main() { char *str = "abcdcdef"; char *ret = my_strchr(str,'d'); printf("%s\n",ret); system("pause"); return 0; }
二、strrchr()
函數原型:char *strrchr( const char *string, int c );
strrchr()函數正好與strchr()函數相反,此函數是查找字符在指定字符串中從正面開始數最后一次出現的位置,若找到,就返回最后一次開始出現的位置,否則返回NULL。還用上邊的字符串為例,該函數返回的是結果是“def”
下面看三種實現方法:
1.從正面數,保存每個位置,則最后一次找到的即為最后一次出現的字符
char *my_strrchr(const char *str,int c) { const char *p = NULL; assert(str); while(*str) { if(*str == c) { p = str; //保存每一次出現該字符的地址 } str++; } if(*str != '\0') return (char *)p; return NULL; }
2.從后面數,遇到的第一個字符即為最后一次出現的字符
char *my_strrchr(const char *str,int ch) { const char *start = str; //將指定字符串首地址保存 assert(str); while(*str) { str++; } //str--; //while(*str--) //{ // ; //} while((str >= start) && (*str != ch)) { str--; } if(*str == ch) return (char *)str; return NULL; }
3.調用strchr函數
char *my_strrchr(const char *str,int ch) { const char *cur = NULL; const char *last = NULL; assert(str); while(cur = strchr(str,ch)) { last = cur; //保存每一次找到的位置 str = cur+1; } return (char *)last; }
三、strrstr()
我們都知道在庫函數中有strstr(),它是查找自字符串的,但是類似于上邊,我們要是想實現一個函數來返回子字符串在指定字符串中最后一次出現的位置該怎么做呢?!
下面看兩種實現方法:
1.從后向前找字符串(由于這種查找凡事不能再遇到'\0',所以不能以'\0'作為循環條件,而用字符串的長度來控制循環)
char *my_strrstr(const char *str,const char *substr,int len1,int len2) { const char *l_start = str+len1-1; const char *end = substr+len2-1; assert(str); assert(substr); while(len1) { str = l_start; while((len2 != 1) && (*substr == *str)) { str--; substr--; len2--; } l_start = str; if(len2 == 1) return (char *)l_start; if(*str != *substr) { l_start = l_start-1; substr = end; } len1--; } return NULL; }
顯然這種方法有點麻煩,而且傳參太多。那么就有第二種實現方法了。
2.同實現strrchr一樣,調用strstr函數
char *my_strrstr(const char *str,const char *substr) { const char *last = NULL; const char *cur = NULL; assert(str); if(!*substr) return (char *)substr; while(cur = strstr(str,substr)) { last = cur; //每次保存找到的字符串的首位置 str = last+1; //使str指向下一位開始尋找 } return (char *)last; }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。