C语言中的strstr函数用来查找子串,找到返回首字符的地址,找不到返回空指针。
使用:
#include#include int main() { char *p1 = "abcdef"; char *p2 = "def"; //找不到返回一个空指针 找到返回d的位置 char *ret = strstr(p1, p2);//在p1指向的字符串里查找是否存在p2指向的字符串 if (ret == NULL) { printf("子串不存在n"); } else { printf("%sn", ret);//ret本身存储的值不是地址 所以无需解引用就可使用 //例如 p1先被赋值为"abcdef" 但p1指针指向"abcdef"中a的地址 所引用以p1无需解引用 } return 0; }
模拟实现:
抽象图解:
实现代码:
//查找字符串函数strstr //char* strstr(const char* string, const char* strCharSet); //NULL - 指的是空指针 //NUL/Null - 指的是'' //传过来俩个字符地址 拿字符型指针接收, 由于不会改变原来的字符串 加上const 返回的也是地址 所以返回类型为char* //return 有终止函数的作用 char* my_strstr(const char* p1, const char* p2) { assert(p1 != NULL);//确保p1 ,p2都不能为空指针 assert(p2 != NULL); char* s1 = NULL;//后面写了s1 = cur = p1,s2 = p1 char* s2 = NULL; char* cur = (char*)p1; if (*p2 == '')//若p2是空字符串 { return (char*)p1;//强转消除警告 } while (*cur)//cur先走到 p2不是p1的子串 { s1 = cur; s2 = (char*)p2; //while((*s1!='') && (*s2 !='') && (*s1 == *s2)) //俩字符相同s1,s2一起走 while((*s1)&&(*s2)&& !(*s1-*s2))//这个更精简 s1-s2 若s1,s2相同,结果为0, !取反 条件为真 { s1++; s2++; } if (*s2 == '')//找到了 返回匹配成功的位置 { return cur; } if (*s1 == '')//若p1的长度小于p2的长度 提前终止 { return NULL; } cur++;//俩字符不相同s1独自走 } return NULL;//找不到子串 返回空指针 } int main() { char *p1 = "abcddefghi"; char *p2 = "def"; //找不到返回一个空指针 找到返回d的位置 char *ret = my_strstr(p1, p2);//在p1指向的字符串里查找是否存在p2指向的字符串 if (ret == NULL) { printf("子串不存在n"); } else { printf("%sn", ret);//ret本身存储的值不是地址 所以无需解引用就可使用 //例如 p1先被赋值为"abcdef" 但p1指针指向"abcdef"中a的地址 所引用以p1无需解引用 } return 0; }
视频讲解是:
C语言从入门到进阶(C语言入门搞定C语言C语言视频教程C语言入门到进阶C语言教程C语言教程C语言教程C语言入门教程C语言入教程C语言C语言视频C语言教程)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1oi4y1g7CF?p=54
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)