字符串函数的简单实现


//1.实现strcpy
//2.实现strcat
//3.实现strstr
//4.实现strchr
//5.实现strcmp
//6.实现memcpy
//7.实现memmove
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
char* my_strcpy(char*dest, const char* src){
	assert(src != NULL);
	char* ret = dest;
	while (*dest!='\0'){
		*dest=*src;
		dest++;
		src++;
	}
	return ret;
}
char* my_strcat(char* dest, const char* src){
	char* ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	while (*dest){
		dest++;
	}
	while (*dest++ = *src++){
		;
	}
	return ret;
}


const char* my_strstr(const char* src, const char* sub){
	assert(src&&sub);
	const char* srci = src;
	const char* subi = sub;
	while (*srci != '\0'){
		while (*srci == *subi && *subi != '\0'){
			++srci;
			++subi;
		}
		if (*subi == '\0'){
			return src;
		}
		else{
			subi = sub;
			++src;
			srci = src;
		}

	}
	return NULL;
}

char* my_strchr(const char* dst, char c){
	while ((*dst != '\0')&&(*dst != c)){
		dst++;
		if (*dst == c){
			return dst;
		}
	}
	return NULL;
}
int my_strcmp(const char* dest, const char* src){
	int ret = 0;
	assert(dest != NULL);
	assert(src != NULL);
	while (!(ret = *(unsigned char*)dest - *(unsigned char*)src) && *dest){
		++dest;
		++src;
	}
	if (ret > 0){
		return 1;
	}
	else if (ret < 0){
		return -1;
	}
	return (ret);
}
void* my_memcpy(void* dst, const void* src, size_t num){
	char* str_dst = (char*)dst;
	char* str_src = (char*)src;
	while (num--){
		*str_dst = *str_src;
		str_dst++;
		str_src++;
	}
	return dst;
}
void* my_memcpy2(void* dest, const void* src, size_t count){
	char *ret = (char *)dest;
	//拷贝count次
	while (count--)
	{
		*(char*)dest = *(char*)src;
		//字符型指针+1即跳过一个字符型(一个字节)
		dest = (char *)dest + 1;
		src = (char *)src + 1;
	}
	return ret;
}
void* my_memmove(void* dst, void* src, size_t n){
	char* str_dst = (char*)dst;
	char* str_src = (char*)src;
	if (str_dst <= str_src || str_dst >= str_src + n){
		while (n--){
			*str_dst++ = *str_src++;
		}
	}
	else{
		str_dst = str_dst + n - 1;
		str_src = str_src + n - 1;
		while (n--){
			*str_dst-- = *str_src--;
		}
	}
	return dst;
}
int main(){
	char p1[] = "abcde";
	char p2[] = "cdeab";	
	char buf[] = "hello world";
	printf("%s\n", my_strcpy(p2, p1));
	printf("%s\n", my_memcpy2(p2, p1,6));
	printf("%s\n", my_memmove(p2, p1, 6));
	printf("%s\n", my_strcat(p2, p1));
	printf("%d\n", my_strcmp(p2, p1));
	printf("%s\n", my_strchr(buf, 'o'));
	int a[12];
	int b[] = { 1, 2, 3 };
	my_memmove(a, b, 12);
	for (int i = 0; i < 12; ++i){
		printf("%d\n",a[i]);
	}

	//char p3[11];
	//strcpy(p3, p1);
	//strcat(p3, p1);
	//if (my_strstr(p3, p2) != NULL){
	//	printf("是旋转字符\n");
	//}
	//else{
	//	printf("不是旋转字符\n");
	//}
	system("pause");
	return 0;
}

//const char* Mystrchr(const char*dst, const char str) {
//	assert(dst != NULL);
//	while (*dst != '\0') {//循环条件是指针不指向字符串结尾
//		if (*dst == str) {//如果相等,返回开始查找的位置
//			return dst;
//		}
//		dst++;//循环条件加加
//	}
//	return NULL;
//}
//int main() {
//	char buf[] = "hello world";
//	char*p = Mystrchr(buf, 'o');
//	printf("%s", p);
//	system("pause");
//	return 0;
//	
//}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值