一、strchr()
成都創(chuàng)新互聯(lián)公司主要為客戶提供服務(wù)項目涵蓋了網(wǎng)頁視覺設(shè)計、VI標志設(shè)計、成都全網(wǎng)營銷、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式重慶網(wǎng)站建設(shè)公司、手機網(wǎng)站制作設(shè)計、微商城、網(wǎng)站托管及網(wǎng)站維護、WEB系統(tǒng)開發(fā)、域名注冊、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計、SEO優(yōu)化排名。設(shè)計、前端、后端三個建站步驟的完善服務(wù)體系。一人跟蹤測試的建站服務(wù)標準。已經(jīng)為成都VR全景行業(yè)客戶提供了網(wǎng)站維護服務(wù)。函數(shù)原型:char *strchr( const char *string, int c );
strchr() 函數(shù)查找字符在指定字符串中首次出現(xiàn)的位置,如果找到,就返回指定字符在已知字符串中最后一次開始出現(xiàn)的位置,找不到就返回NULL。例如:已知字符串“abdedef”,該函數(shù)返回“dedef”
#include#include #include 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()
函數(shù)原型:char *strrchr( const char *string, int c );
strrchr()函數(shù)正好與strchr()函數(shù)相反,此函數(shù)是查找字符在指定字符串中從正面開始數(shù)最后一次出現(xiàn)的位置,若找到,就返回最后一次開始出現(xiàn)的位置,否則返回NULL。還用上邊的字符串為例,該函數(shù)返回的是結(jié)果是“def”
下面看三種實現(xiàn)方法:
1.從正面數(shù),保存每個位置,則最后一次找到的即為最后一次出現(xiàn)的字符
char *my_strrchr(const char *str,int c) { const char *p = NULL; assert(str); while(*str) { if(*str == c) { p = str; //保存每一次出現(xiàn)該字符的地址 } str++; } if(*str != '\0') return (char *)p; return NULL; }
2.從后面數(shù),遇到的第一個字符即為最后一次出現(xiàn)的字符
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.調(diào)用strchr函數(shù)
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()
我們都知道在庫函數(shù)中有strstr(),它是查找自字符串的,但是類似于上邊,我們要是想實現(xiàn)一個函數(shù)來返回子字符串在指定字符串中最后一次出現(xiàn)的位置該怎么做呢?!
下面看兩種實現(xiàn)方法:
1.從后向前找字符串(由于這種查找凡事不能再遇到'\0',所以不能以'\0'作為循環(huán)條件,而用字符串的長度來控制循環(huán))
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; }
顯然這種方法有點麻煩,而且傳參太多。那么就有第二種實現(xiàn)方法了。
2.同實現(xiàn)strrchr一樣,調(diào)用strstr函數(shù)
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; }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。