C语言 字符串函数的模拟实现

本文介绍了C语言中常用的字符串处理函数,包括strlen用于计算字符串长度,strcpy用于复制字符串,strcat用于连接字符串,strcmp用于比较字符串,strstr用于查找子字符串,以及memcpy用于内存拷贝。这些函数是C语言编程的基础,对于理解和操作字符串至关重要。
摘要由CSDN通过智能技术生成

目录

1.strlen函数

2.srtcpy函数

3.strcat函数

4.strcmp函数

5.strstr函数

6.memcpy函数


1.strlen函数

#include <stdio.h>
int My_strlen(const char* s) {
	char* start = s;
	char* end = s;
	while (*end) {
		end++;
	}
	return end - start;
}
int main() {
	int num = 0;
	const char* str = "asdfghjkl";
	num = My_strlen(str);
	printf("%d", num);
}

int My_strlen(const char *s)
{
	if (*s == '\0') {
		return 0;
	}
	return 1 + my_strlen(s+1);

}

2.srtcpy函数

#include <stdio.h>
#include <assert.h>
char* My_strcpy(char* buf, const char* str) {
	assert(buf != NULL);
	assert(str != NULL);
	char* ret = buf;
	while (*buf = *str) {
		str++;
		buf++;
	}
	return ret;
}
int main() {
	const char* str = "asdfghjkl";
	char buf[16] = { 0 };
	printf("%s", My_strcpy(buf, str));
}

3.strcat函数

#include <stdio.h>
#include <assert.h>
char* My_strcat(char* str1, const char* str2)
{
	assert(str1 != NULL);
	assert(str2 != NULL);
	char* ret = str1;
	while (*str1) {
		str1++;
	}
	while (*str1 = *str2) {
		str1++;
		str2++;
	}
	return ret;
}
int main() {
	char str1[32] = "asdfghjkl";
	char str2[32]= "zxcvbnm";
	printf("%s", My_strcat(str1, str2));
}

4.strcmp函数

#include <stdio.h>
#include <assert.h>
int My_strcmp(const char* s1, const char* s2)
{
	assert(s1 != NULL);
	assert(s2 != NULL);
	int ret = 0;
	const unsigned char* _s1 = (const unsigned char*)s1;
	const unsigned char* _s2 = (const unsigned char*)s2;
	while (!(ret = (*_s1 - *_s2)) && *_s1) {
		_s1++;
		_s2++;
	}
	if (ret < 0) {
		ret = -1;
	}
	else if (ret > 0) {
		ret = 1;
	}
	else {
		ret = 0;
	}
	return ret;
}
int main() {
	const char str1[32] = "asdfghjkl";
	const char str2[32]= "asdfghjk";
	printf("%d", My_strcmp(str1, str2));
}

5.strstr函数

#include <stdio.h>
#include <assert.h>
const char* My_strstr(const char* target,const char* sub) {
	assert(target != NULL);
	assert(sub != NULL);
	const char* start = target;
	const char* move = NULL;
	const char* sub_start = NULL;
	while (*start) {
		move = start;
		sub_start = sub;
		while (*move && *start && *move == *sub_start) {
			move++;
			sub_start++;
			if (*sub_start) {
				return start;
			}	
		}	
		start++;
	}
	return NULL;
}

6.memcpy函数

#include <stdio.h>
#include <assert.h>
char* My_memcpy(char* _buf,const char * _str,int num) {
	assert(_buf != NULL);
	assert(_str != NULL);
	if (num == 0) {
		return _buf;
	}
	unsigned char* buf = (unsigned char*)_buf;
	unsigned char* str = (unsigned char*)_str;
	int n = strlen(str);
	if (num > n) {
		printf("enter error!");
	}
	while (num) {
		*buf = *str;
		buf++;
		str++;
		num--;
	}
	return _buf;
}
int main() {
	const char* str = "asdfghjk";
	char buf[16] = { 0 };
	int num = 0;
	scanf_s("%d", &num);
	printf("%s", My_memcpy(buf, str, num));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五毛变向.

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值