字符串中子串的查找 -- C语言

思路

使用两个循环,外循环遍历主串,内循环遍历查找串,主串一个字符一个字符的后移,分别和查找串进行批评,找到了就返回

 

代码实现

char * mystrstr(char * str, char * sub){
	if(NULL == str || NULL == sub){
		printf("mystrstr param error\n");
		return NULL;
	}

	char * p = NULL, * q = NULL, * c = NULL;
	int found = 0;

	p = str;
	while(*p != '\0'){

		q = sub;
		c = p;
		while(*c == *q && *q != '\0'){
			q++;
			c++;
		}

		if('\0' == *q){
			found = 1;
			break;			
		}
		p++;
	}

	if(1 == found){
		return p;
	} else {
		return NULL;
	}
}


void testmystrstr(void){
	char * str1 = "12345";
	char * str2 = "45";
	char * str3 = "23";
	char * str4 = "25";
	char * r = NULL;

	printf("\n************  testmystrstr ************ \n");

	r = mystrstr(str1, str2);
	if(NULL != r){
		printf("substr: %s\n", r);
	} else {
		printf("can not find sub: %s\n", str2);
	}
	

	r = mystrstr(str1, str3);
	if(NULL != r){
		printf("substr: %s\n", r);
	} else {
		printf("can not find sub: %s\n", str3);
	}

	r = mystrstr(str1, str4);
	if(NULL != r){
		printf("substr: %s\n", r);
	} else {
		printf("can not find sub: %s\n", str4);
	}	

	return;
}

 

代码编译

gcc main.c str.c -g -o a.exe

 

调试输出

************  testmystrstr ************
substr: 45
substr: 2345
can not find sub: 25

 

你可能感兴趣的:(字符串,面试)