字串函式---strstr()、memchr()、strchr()詳解及實現
阿新 • • 發佈:2019-01-26
一、strstr()函式:
strstr():搜尋一個字串在另一個字串中的第一次出現。找到所搜尋的字串,則該函式返回第一次匹配的字串的地址;如果未找到所搜尋的字串,則返回NULL。
格式:strstr(str1,str2);
str1: 被查詢目標str2: 要查詢物件
實現程式碼:
#include<iostream> #include<assert.h> using namespace std; char *strstr_m(const char *str1,const char *str2) { const char *cp=NULL; const char *c=str2; bool falg=false; if(*str2=='\0') return (char*)str1;//當第二個引數為空時,返回str1的首地址 while(*str1!='\0') { while(*str1==*str2) { if(!falg) { falg=true; cp=str1; } str1++; str2++; if(*str2=='\0') return (char*)cp; } str1++; cp=NULL; falg=false; str2=c; } return (char*)cp; } int main() { char a[]="lanzhihui is a good boy!"; char *s=strstr_m(a,"is");//注意:當第二個實參為 "" 時,s指向a陣列的首地址 if(s!=NULL) { cout<<s<<endl; } else { cout<<"Not Find!"<<endl; } system("pause"); return 0; }
執行上面結果為:is a good boy!
二、memchr()函式
memchr(): void *memchr( const void *buffer, int ch, size_t count );
函式在buffer指向的陣列的count個字元的字串裡查詢ch 首次出現的位置。返回一個指標,指向ch 在字串中首次出現的位置, 如果ch 沒有在字串中找到,返回NULL。
實現程式碼:
#include<iostream> #include<assert.h> using namespace std; void *memchr_m(const void *buffer,int ch,int n) { assert(buffer!=NULL); char *cp=(char*)buffer; while(*cp++!='\0'&&n) { if(*cp-ch==0) return (void*)cp; --n; } return NULL; } int main() { char a[]="lanzhihui is a good boy!"; char *p; p=(char*)memchr_m(a,'z',50); if(p!=NULL) { cout<<"Find!"<<endl; cout<<p<<endl; } else { cout<<"Not Find!"<<endl; } system("pause"); return 0; }
三、strchr()函式
strchr():char *strchr(const char *s,char c);
功能:查詢字串s中首次出現字元c的位置
返回值:成功則返回要查詢字元第一次出現的位置,失敗返回NULL。
實現程式碼:
#include<iostream> #include<assert.h> using namespace std; char *strchr_m(const char *s,int ch) { assert(s!=NULL); while(*s!='\0') { if(*s-ch==0) return (char*)s; s++; } return NULL; } int main() { char a[]="lanzhihui is a good boy!"; char *p; p=strchr_m(a,'l'); if(p!=NULL) { cout<<"Find!"<<endl; cout<<p<<endl; } else { cout<<"Not Find!"<<endl; } system("pause"); return 0; }