#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
char* Mystrstr(char* str1, char* str2) {
	assert(*str1);
	assert(*str2);
	char* temp1 = str1;
	char* temp2 = str2;
	//求str2的长度
	int len = 0;
	while (*str2 != '\0') {
		++str2;
		++len;
	}
	str2 = temp2;
	while (*str1 != '\0') {
	//如果指针str1和str2所指的值相同,就让指针temp1等于str1,开始查找
		if (*str1 == *str2) {
			temp1 = str1;
			int i = 0;
			//向后查找len次,如果不同则退出循环
			for (; i < len; ++i) {
				if (str1[i] != str2[i]) {
					break;
				}
			}
			//退出循环后如果i与len相等,说明str2为str1的子串,返回指针temp1
			if (i == len) {
				return temp1;
			}
		}
		++str1;
	}
	//全部找完没有返回,则说明str2不是str1的子串
	return NULL;
}

int main() {
	char str1[] = "abcdefg";
	char str2[] = "bcd";
	char* temp = Mystrstr(str1, str2);
	//printf("%s", temp);
	if (!temp) {
		printf("不是子串\n");
	}
	else {
		printf("是子串\n");
	}
	system("pause");
	return 0;
}

C语言实现strstr

相关文章: