C语言模拟实现函数

今天,我介绍一下如何模拟实现strcat,strcpy , strcmp以及strstr

1,模拟实现strcat:

思路:为了将src的内容追加到dest的后面,首先让指针*dest++,直到遇到‘\0’;然后再将src的内容追加上去。由于在整个执行完之后,dest已经指向了字符串的末尾,所以在刚开始,将dest的值给ret,最后返回ret,即可得到修改后的字符串。代码如下:

char *mystrcat(char *dest,const char *src)
{
char *ret  =dest;
assert(dest != NULL);
assert(src  != NULL);
while(*dest)
{
dest++;
}
while((*dest++ = *src++))
{
  ;
} 
return ret; 

}
int main()
{
char arr[10] = "hello";
printf("%s ", mystrcat(arr, " world"));
return 0;
}
2, 模拟实现strcpy:

思路:由于传参传的是首元素地址,所以用指针变量来接受,而且在使用指针变量时注意判空即:assert。然后src的内容一个一个进行拷贝,直到遇到\0dest停止拷贝。代码如下:

char *mystrcpy(char *dest,const char *src)
{
char *ret  =dest;
assert(dest != NULL);
assert(src  != NULL);

while((*dest++ = *src++))
{
  ;
} 
return ret; 

}
int main()
{
char arr[10] = "";
printf("%s ", mystrcpy(arr, "Hello"));
return 0;
} 
3, 模拟实现strcmp:

思路:由于这里的两个字符串只是进行比较,而不需要进行修改,所以可以加上const进行修饰。其次,在进行字符串比较的时候,比较的是相同位置的ASCII码,而不是看哪个字符串长。

在字符串进行比较的时候str1=str2,则返回零;若str1< str2,则返回负数;若str1>str2,则返回正数。两个字符串进行一一比较如果两个字符串不一样,直接相减,当两个字符串相等时,直接输出0。代码如下: 

int my_strcmp(const char *str1, const char *str2)
{
	assert(str1 != NULL);
	assert(str2 != NULL);
	while(*str1 == *str2)
	{
		if(*str1 == '\0')
		{
			return 0;
		}
		str1++;
		str2++;
		
	}
	return *str1-*str2;
}
int main()
{
	char *p1 = "abcdef";
	char *p2 = "abchd"; 
	int ret = my_strcmp(p1,p2);
	printf("%d ", ret);
	return 0;
}

4,模拟实现strstr

思路:首先,要明白strstr的功能,给上两个字符数组:str1[20]="abcdefg",str2[10]="bcd";通过使用strstr得到的结果是”bcdefg“。其次,在进行查找的时候,s1是在向前走的,因此需要一个指针cur,只有当cur走到’\0’的时候,才算整个字符串查找完毕。需要注意的是,每次查找中,需要判断*str1 != '\0'   *str2 != '\0' ,然后判断  *str1 == *str2,顺序不能颠倒,即先判断是否遇到’\0’,再判断是否相等。

char * my_strstr(const char *str1, const char *str2)
{
	const char *cur = str1;
	const char *s1 = str1;
	const char *s2 = str2;
	assert(str1 != NULL);
	assert(str2 != NULL);
	while(*cur != '0')
	{
		str1 = cur;
		str2 = s2;
		while((*str1 != '\0')  && (*str2 != '\0')   &&  (*str1 == *str2))
		{
			str1++;
			str2++;
		}
		if(*str2 == '\0')
		{
			return (char* )cur;
		}
		
		cur++;
	}
	return NULL;
}
int main()
{
	char *p1 = "abcdefg";
	char *p2 = "bcdef";
	
	printf("%s\n", my_strstr(p1, p2));
	return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_37415461/article/details/80773952