重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
strstr和strrstr已經算是字符串中相對比較難的了,但是只要我們善于分析,解剖字符串,就會化難為易。其實學習代碼的過程中需要我們靜下心來分析,理解。
專注于為中小企業提供成都網站建設、網站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業蘆淞免費做網站提供優質的服務。我們立足成都,凝聚了一批互聯網行業人才,有力地推動了近1000家企業的穩健成長,幫助中小企業通過網站建設實現規模擴充和轉變。
srtstr函數的功能及用法
原型:char *strstr(const char *dst, const char *src);
#include
找出src字符串在dst字符串中第一次出現的位置(不包括src的串結束符)。返回該位置的指針,如找不到,返回空指針。
代碼:
#include#include #include char *my_strstr(const char *dst, const char *src) { const char *str1 = dst; const char *str2 = src; const char *fast = NULL; assert(dst); assert(src); while (*str1) { fast = str1; while (*str1 && *str2 && *str1 == *str2) { str1++; str2++; } if (*str2 == '\0') return (char*)fast; str1 = fast+1; str2 = src; } return NULL; } int main() { char arr1[] = "abcdefgdefk"; char arr2[] = "defk"; char *ret = my_strstr(arr1,arr2); if (*ret) { puts(ret); } return 0; }
解析代碼:
在main函數中定義兩個字符串數組,char arr1[]="abcdefgdefk";char arr2[]="defk";在調用函數中用指針來接收,指針接收的優點是指針指向字符串的首地址,指針最好用const保護起來,以防被破壞。在調用函數中定義三個指針,char *sr1=dst,char* str2=src,char* fast=NULL(避免野指針),使用之前先斷言指針是否存在,如果str1的內容存在進入循環,先將fsat=str1;如果str1指向的內容等于str2指向的內容,str1,str2的地址加加,如果str2的內容等于"\0"了,說明str2字符串的內容在str1字符串中出現,否則str1指向fast指針指向地址的后一個地址,str2返回到它的首地址,繼續執行循環直到str2字符串在str1中第一次出現。
模擬實現strrstr函數
原型:char *strrstr(const char *str1, const char *str2);
#include
找出str2字符串在str1字符串中最后出現的位置(不包括str2的串結束符)。返回該位置的指針,如找不到,返回空指針。
#include#include #include char *my_strrstr(const char *dst,const char *src) { char *str1=dst; char *str2=src; char *fast=NULL; char *last=NULL; assert(dst); assert(src); while (*str1) { fast=str1; while (*str1&&*str2&&*str1==*str2) { str1++; str2++; } if (*str2 == '\0') last=fast; str1=fast+1; str2 = src; } if (*str1 == '\0') return /*(char *)*/last; /*return NULL;*/ } int main() { char *Qwe="asdfghasdgfdfgdfgdfgdfgdfg"; char *Zaq="dfg"; char *ret=my_strrstr(Qwe,Zaq); puts(ret); return 0; }