面试前必须掌握(C语言写一个字符串查找函数 strstr)

    技术2022-07-11  112

    这是面试嵌入式软件工程师常考的题目,面试前必须掌握。

    参考博客

    定义:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。

    定义说的有点羞涩难懂。举个例子就知道了。 比如: char str2 = “cdef”; char str1 = “abcdefgh”; 则通过函数,将返回 strstr(str1,str2) = cdefgh;

    如果str1不包含有str2。 char str2 = “cxef”; char str1 = “abcdefgh”; 则通过函数,将返回 strstr(str1,str2) = NULL;

    /* strstr 实现 */ char* mystrstr(const char* dest, const char* src) { char* tdest = dest; char* tsrc = src; while (*tdest) { char* flag = tdest;//设置标志位,方便回滚。 while (*tdest == *tsrc && *tdest!='\0') {//开始进行比较,如果第一个字符相等,继续循环比较下一个字符。 tdest++; tsrc++; } //上面循环完毕,有如下3种情况 if (!*tsrc) { //tsrc已经到达\0位置,说明在dest中已经找到 子字符串,唯一找到字串的出口。 return flag;//返回找到子串的起始位置。 } if(!*tdest){ //走到这里,tdest到达\0 而tsrc没有到达\0,没有找到 return NULL; } //走到这里,没有匹配成功,继续从下一位开始匹配整个子串 tdest++; } return NULL; } int main(int argc,char *argv[]) { char str1[] = {"weisiqi"}; char str2[] = {"is"}; const char *p; p = my_strstr(str1,str2); printf("%s\n",p); return 0; }

    输出结果:isiqi

    Processed: 0.014, SQL: 9