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

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

参考博客

定义: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

你可能感兴趣的:(C语言编程每日一练)