字符串实现函数

strcpy的实现

void mycpy(char *s1,char *s2)
{
while(*s1++=*s2++);
}

strlen的实现

int mylen(char *s1)
{
char *p=s1;
while(*p++);
return p-s1-1;
}

strcat 的实现

void mycat(char *s1,char *s2)
{
while(*s1++);
s1–;
while(*s1++=*s2++);
}

atoi的实现

void myatoi(char *str)
{
if(*str==NULL)
	return -1;
while(*str==" ")
	str++;
int sign=(*str=="-")?-1:1;
int result=0;
while(*str>='0'&&str<='9')
{
	result=result*10+(*str-'0');
	str++;
}
while(*str==" ")
	str++;
if(*str=='\0')
	return -1;
return result*sign;
}
int main()
{
printf("%D\r\n",myatoi("123456"));
return 0;
}

itoa函数实现

char *myitoa(int num,char *str,int radix)
{
	int sign=num;
	int tmp;
	int j;
	if(sign<0)
	{
		num=-num;
	}
	while(num)
	{
		*ptr++=num%radix;
		num/=radix;
		if(*ptr<radix)
		{
			*ptr++=num+'0';
			break;
		}
	}
		if(sign<0)
		{
			*ptr++='-';
		}
		*ptr='\0';
		j=ptr-str-1;
		for(int i=0;i<str;i++)
		{
			int tmp=str[i];
			str[i]=str[j];
			str[j--]=tmp;
		}
	return str;
}
int main()
{
char str[6];
myitoa(123456,sr,10);
}

strcmp的实现

int my_strcmp(const char *str1,const char *str2)
{
assert(str1&&str2);
while(*str1==*str2)
{
if(*str='\0')
{
return 0;
}
str1++;
str2++;
}
return *str1-*str2;
}

strncpy()

char* mystrncpy(char* dest,const char* src,ssize_t count)
{
char* begin=dest;
assert(str1&&str2);
while(count&&(*dest=*src))
{
str++;
src++;
count--;
}
while(count--)
{
*dest++='\0';
}
return begin;
}

strncat

char* my_strncat(char* dest,const char* src,ssize_t count)
{
char *begin=dest;
while(*dest)
	dest++;
while(count&&(*dest=*src))
{
count--;
}
if(count==0)
	*dest='\0';
return begin;
}

memcpy

void* my_memcpy(void* dest, const void* src, size_t count) {
	void* begin = dest;
	while (count--) {
		*(char*)dest = *(char*)src;
		dest = (char*)dest + 1;
		src = (char*)src + 1;
	}
	return begin;
}

memmove

void* my_memmove(void* dest, const void* src, size_t count) {
	assert(dest && src);
	char* begin = dest;
	if (dest > src) {
        //后->前
		while (count--) {
			*((char*)dest + count) = *((char*)src + count);
		}
	}
	else {
        //前—>后
        while (count--) {
			*(char*)dest = *(char*)src;
			(char*)dest += 1;
			(char*)src += 1;
		}
	}
	return begin;
}
int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	//1234->3456
	my_memmove(arr + 2, arr, 4 * sizeof(int));
	//3456->1234
	my_memmove(arr, arr + 2, 4 * sizeof(int));
	for (int i = 0; i < 10; i++) {
		printf("%d ", arr[i]);
	}
	return 0;
}

memcpy()

int my_memcmp(const void* buf1, const void* buf2, size_t count) {
	assert(buf1 && buf2);
	while (count-- && (*(char*)buf1 == *(char*)buf2)) {
		(char*)buf1 += 1;
		(char*)buf2 += 1;
	}
	return *(char*)buf1 - *(char*)buf2;
}
int main()
{
	int arr1[] = { 1,2,3,4,5 };
	int arr2[] = { 1,2,3,4,6 };
	int ret = my_memcmp(arr1, arr2, 1 * sizeof(int));
	printf("%d\n", ret);
	return 0;
}

strstr

char* my_strstr(const char* str, const char* set) {
	assert(str && set);
	char* s1 = str;
	char* s2 = set;
	while (*s1) {
		//归位
		str = s1; 
		set = s2;
		//防止s1=s1=\0
		while ((*str && *set) && (*str == *set)) {
			str++;
			set++;
		}		
		//判断
		if (*set == '\0') {
			return s1;
		}
		//进位
		s1++;
	}
	return NULL;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不做小白√

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值