模拟实现字符串函数

模拟实现strcpy

char* my_strcpy(char* dst, const char*src)
{
	assert(dst != NULL);
	assert(src != NULL);
	char *ret = dst;
	while (*dst = *src)
	{
		dst++, src++;
	}
	return ret;
}
int main()
{
	char buf[32];
	char a[] = "abcdef";
	printf("%s\n", my_strcpy(buf, a));
	system("pause");
	return 0;
}

模拟实现strcat

char *my_strcat(char* dst, char* src)
{
	assert(dst != NULL);
	assert(src != NULL);
	char *ret = dst;
	while (*dst)
	{
		dst++;
	}
	while (*dst = *src)
	{
		dst++, src++;
	}
	return ret;
}
int main()
{
	char buf[32]="12345";
	char a[] = "abcdef";
	printf("%s\n", my_strcat(buf, a));
	system("pause");
	return 0;
}

模拟实现strcmp

int my_strcmp(const char* s1, const char* s2)
{
	assert(s1 != NULL);
	assert(s2 != NULL);
	int res = 0;
	int ret=0;
	while (!(ret = *(unsigned char*)s1 - *(unsigned char*)s2) && *s1)
	{
		s1++, s2++;
	}
	if (ret < 0)
	{
		res = -1;
	}
	else if (ret>0)
	{
		res = 1;
	}
	else{
		res = 0;
	}
	return(res);
}
int main()
{
	char s1[]="abcd";
	char s2[] = "abce";
	printf("%d\n", my_strcmp(s1,s2));
	system("pause");
	return 0;
}

模拟实现strncpy

char *my_strncpy(char *dst, const char*src, int num)
{
	assert(dst != NULL);
	assert(src != NULL);
	char *ret = dst;
	while (num)//循坏num次
	{
		*dst = *src;
		dst++;
		src++;
		num--;
	}
	if (*(dst - 1) != '\0')//判断是否将\0复制到字符串中
	{
		*dst = '\0';
	}
	return ret;
}
int main()
{
	char buf[32];
	char a[] = "abcdef";
	printf("%s\n",my_strncpy(buf, a,4 ));
	system("pause");
	return 0;
}
模拟实现strncat

char *my_strncat(char* dst, const char *src, int n)
{
	assert(dst != NULL);
	assert(src != NULL);
	char *ret = dst;
	while (*dst)//将dst的指针移到‘\0'处
	{
		dst++;
	}
	while (n)
	{
		*dst = *src;
		dst++, src++;
		n--;
	}
	if (*(dst - 1) != '\0')
	{
		*dst = '\0';
	}
	return ret;
}
int main()
{
	char buf[32] = "123456";//不能写成buf[]
	char a[] = "abcdef";
	printf("%s\n", my_strncat(buf, a, 4));
	system("pause");
	return 0;
}
模拟实现strncmp

int my_strncmp(const char *src, const char *dst, int n)
{
	assert(src != NULL);
	assert(dst != NULL);
	int ret = 0;
	while (n)
	{
		ret = *(unsigned char*)src - *(unsigned char*)dst;
		src++, dst++;
		n--;
		if (ret < 0)
		{
			ret = -1;
		}
		else if (ret>0)
		{
			ret = 1;
		}
		else{
			ret = 0;
		}
	}
	
	return ret;

}
int main()
{
	char str1[] = "abcduuh";
	char str2[] = "abchuhuy";
	printf("%d\n", my_strncmp(str1, str2, 4));
	system("pause");
	return 0;
}
模拟实现strstr

char *my_strstr(char*str, char*sub_str)
{
	assert(str);
	assert(sub_str);
	char *p = NULL;
	char *np = NULL;
	char *q = NULL;
	p = str;
	while (*p)
	{
		np = p;//np始终在p的前面
		q = sub_str;
		for (; *np&&*q&&*np == *q; np++, q++)//指针np和指针q都不能为空,且np指的内容和q的内容相等
		{
			;
		}
		if (*q == '\0')//说明已经找到
		{
			return p;
		}
		else if (*np == '\0')//q还没找完,p已经找完,就没必要再找了
		{
			break;
		}
		else{     //走到这儿说明p没到'\0',q也没到'\0',只能是*np!=*q;
			p++;
		}
	}
	return NULL;
}
int main()
{
	char str1[] = "abdhadbfjhajd";
	char str2[] = "adbf";
	printf("%s\n", my_strstr(str1, str2));
	system("pause");
	return 0;
}

模拟实现strchr

char *my_strchr(char *dst, char ch)
{
	assert(dst);
	while (dst != NULL)
	{
		if (*dst == ch)
		{
			return dst;
		}
		else
		{
			dst++;
		}

	}
	return NULL;

}
int main()
{
	char str[] = "abdhshb";
	char ch;
	printf("Please enter you want to find character:");
	scanf("%c", &ch);
	printf("%s\n", my_strchr(str, ch));
	system("pause");
	return 0;
}

模拟实现memcpy

void *my_memcpy(void *dst, const void *src, int num)
{
	assert(dst);
	assert(src);
	char *_dst = (char *)dst;
	const char *_src = (const char *)src;
	while (num--)
	{
		*_dst = *_src;
		_dst++, _src++;
	}
	return dst;
}
int main()
{
	char s1[10];
	char s2[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	my_memcpy(s1, s2, sizeof(s2));
	system("pause");
	return 0;
}

模拟实现memmove
void *my_memmove(void *dst, const void *src, int num)
{
	assert(dst);
	assert(src);
	char *_d = (char*)dst;
    char *_s = (char*)src;
	if (_d > _s&&_d < _s + num)  //从右往左拷贝
	{
		*_d += num;
		*_s += num;
		while (num--)
		{
			*_d = *_s;
			_d--, _s--;
		}
		
	}
	else
	{
		while (num--)
		{
			*_d = *_s;
			_d++, _s++;
		}
	}
	return dst;
}
int main()
{
	char s1[10] = "abcdef";
	char s2[10];
	printf("%s\n", my_memmove(s2, s1, strlen(s1) + 1));
	system("pause");
	return 0;
}



猜你喜欢

转载自blog.csdn.net/freedom_222/article/details/80489911
今日推荐