c语言-字符函数和字符串函数

字符函数和字符串函数:

求字符串长度:strlen
长度不受限制的字符串函数:strcpy.strcat.strcmp
长度受限制的字符串函数介绍:strncpy.strncat.strncmp
字符串查找:strstr.strtok
错误信息报告:strerror
字符操作
内存操作函数:memcpy.memmove.memset.memcmp

库函数的模拟实现:

int My_strlen(const char* str) {
	int count = 0;
	while (*str) {
		count++;
		str++;
	}
	return count;
}
char* My_strcpy(char* dest,const char* str) {
	char *tmp = dest;
	while (*dest++ = *str++);
		return tmp;
}
char* My_strcat(char* dest, const char*src) {
	char* ret = dest;
	while (*dest) {
		dest++;
	}
	while (*dest++ = *src++) {
		;
	}
	return ret;
}
char* My_strstr(const char* str1, const char* str2) {
	assert(str1);
	assert(str2);
	
	char* cp = (char*)str1;
	const 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++;
	}
	return 0;
}
int My_strcmp(const char* str1, const char*str2) {
	int ret = 0;
	assert(str1 != NULL);
	assert(str2 != NULL);
	while (!(ret = *(unsigned char*)str1 - *(unsigned char*)str2) && *str2) {
		++str1, ++str2;
	}
	if (ret < 0) {
		ret = -1;
	}
	else if (ret > 0) {
		ret = 1;
	}
	return ret;
}
void* Memcpy(void* dst, const void* src, size_t count) {
	void* ret = dst;
	assert(dst);
	assert(src);
	while (count--) {
		*(char*)dst = *(char*)src;
		dst = (char*)dst + 1;
		src = (char*)src + 1;
	}
	return (ret);
	}
void * memmove ( void * dst, const void * src, size_t count) 
{ 
 void * ret = dst; 
 if (dst <= src || (char *)dst >= ((char *)src + count)) { 
 while (count--) { 
 *(char *)dst = *(char *)src; 
 dst = (char *)dst + 1; 
 src = (char *)src + 1; 
 } 
 } 
 else { 
 dst = (char *)dst + count - 1; 
 src = (char *)src + count - 1; 
 while (count--) { 
 *(char *)dst = *(char *)src; 
 dst = (char *)dst - 1; 
 src = (char *)src - 1; 
 } 
 } 
 return (ret);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值