字符串函数的模拟实现

本文介绍了使用C语言模拟实现常见的字符串处理函数,包括strcpy、strcat、strstr、strchr、strcmp、memcpy和memmove。通过示例代码展示了如何进行字符串复制、连接、查找、比较及内存操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
#include <stdlib.h>
#include<string.h>
1.实现strcpy
char *my_strcpy( char*dest, const char*src)
{
	char*ret = dest;
	assert(dest&&src);
	while (*dest++ =*src++)
	{
		;
	}
	return ret;
}
int main()
{
	char a[50] = {};
	printf("enter s string:\n");
	//scanf("%s", &a);
	printf("string is %s\n", my_strcpy (a,"hahahahaha"));
	system("pause");
	return 0;
}



2.实现strcat  
char*my_strcat(char*dest, const char*src)
{
	char *ret = dest;
	assert(dest&&src);
	while (*dest)
	{
		dest++;
	}
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}
int main()
{
	char a[] = "nimen";
	char b[] = "haoya";
	printf("string is: %s \n", my_strcat(a,b));
	system("pause");
	return 0;

}



3.实现strstr
char *my_strstr(const char* str1,  char* str2)
{
	assert(str1&&str2);
	char *cp = (char*)str1;
	char *substr = (char*)str2;
	char *s1 = NULL;
	if (*str2 == '\0')
	return NULL;
	while (*cp)
	{
		s1 = cp;
		substr = str2;
		while (*s1 && *substr && (*s1 == *substr))
		{
			s1++;
			substr++;
		}
		if (*substr == '\0')
			return cp;
		cp++;
	}
}
int main()
{
	char a[] = "nimenhaoya";
	char b[] = "haoya";
	printf("%s\n", my_strstr(a, b));
	system("pause");
	return 0;
}


4.实现strchr
char*my_strchr( char* str, char c)
{
	assert(str);
	char* ret =str;
	if (*str == '\0')
		return NULL;
	while (*str++)
	{
		if (*str == 'c')
			return str-1;
	}
}
int main()
{
	char arr[] = "abcbdeef";
	char c = 'b';
	printf("%s\n", my_strchr(arr, c));
	system("pause");
	return 0;
}




5.实现strcmp
int  my_strcmp(const char* str1, const char* str2)
{
	int ret = 0;
//	assert(str1&&str2);
	while (!(ret = *(int *)str1 - *(int*)str2) && *str2)
		str1++, str2++;
	if (ret < 0)
		ret = -1;
	else if (ret = 0)
		ret = 0;
	else if(ret>0)
		ret = 1;
	return ret;
}
int main()
{
	char arr1[] = "nimenhaoya";
	char arr2[] = "nimenhaoyy";
	printf("%d\n", my_strcmp(arr1, arr2));
	system("pause");
	return 0;
}


6.实现memcpy
void *my_memcpy(void *dest, const void *src, size_t n)
{
	void *ret = dest;
	assert(dest&&src);
	while (n--)
	{
		*(char*)dest =*(char*)src;
		dest=(char*)dest+1;
		src = (char*)src + 1;
	}
	return ret;
}
int main()
{
	char arr1[50] = "";
	char arr2[50] = "abcdefgh";
	int n = 0;
	printf("enter copy length: ");
	scanf(" %d" ,&n);
	printf("%s\n",my_memcpy(arr1,arr2,n));
	system("pause");
	return 0;
}


7.实现memmove
void *memmove(void* dest, const void* src, size_t count)
{
	assert(dest&&src);
	void *ret = dest;
	if (dest <= src || (char*)dest >= ((char*)src + count))//后向前复制
	{
		while (count--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else{
		dest = (char*)dest + count - 1;//前向后翻译
		src = (char*)src + count - 1;
		while (count--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest -1;
			src = (char*)src -1;
		}
	}
	return ret;
}
int main()
{
	int n = 0;
	char arr1[20] ;
	char arr2[] = "abcdefgh";
	printf("enter copy number :");
	scanf("%d", &n);
	printf("string is %s\n", memmove(arr1,arr2,n));
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值