关于C/C++中字符串相关操作函数(strlen,strstr,strch,strcpy,strcmp等)重写

strcpy函数重写:

bool My_strcpy(char *dst,char *src) {
	if (dst == nullptr || src == nullptr)
		return false;
	while (*src != 0) {
		*dst = *src;
		dst++;
		src++;
	}
	*dst = 0;
	return true;
}

strcmp函数重写:

int My_strcmp(char *str1, char *str2) {
	if (str1 == nullptr || str2 == nullptr)
		return -2;
	while (*str1&&*str2) {
		if (*str1 > *str2)
			return 1;
		else if (*str1 < *str2)
			return -1;
		str1++; str2++;
	}	
	 if (*str1 == 0 && *str2 != 0)
		return -1;
	else if (*str2 == 0 && *str1 != 0)
		return 1;
	return 0;
}

strcat函数重写:

bool My_strcat(char *dst, char *src) {
		if(dst==nullptr ||src==nullptr)
	return false;
		while (*dst)
			dst++;
		while (*src) {
			*dst = *src;
			dst++;
			src++;
		}
		*dst = 0;
		return true;
}

strchr函数重写:
(返回值是待查找字符出现位置之后的字符串)

char* My_strchr(char *src,char dst) {
	if (src == nullptr || dst == 0)
		return nullptr;
		while (*src) {
			if (*src == dst) {
				src++;
				return src;
			}
			src++;	
	}
		return nullptr;
}

strstr函数重写:
第一种方法:

char * My_strstr1(char *src, char *dst) {
	if (src == nullptr || dst == nullptr)
		return nullptr;
	char * tmp_src = src;
	char * tmp_dst = dst;
	while (*tmp_dst) {
		 tmp_src = src;
		 tmp_dst = dst;
		char * flag = tmp_dst;
		while (*tmp_dst == *tmp_src && *tmp_dst) {
			tmp_dst++; tmp_src++;
		}
		if (*tmp_src == 0)
			return flag;
		else if (*tmp_dst == 0)
			return nullptr;
		dst++;
	}
	return nullptr;
}

第二种方法(朴素的模式匹配算法):

char * My_strstr2(char *src, char *dst) {
	if (src == nullptr || dst == nullptr)
		return nullptr;
	char * tmp_src = src;
	char * tmp_dst = dst;
	int i = 0, j = 0;
	while (i <= strlen(src) - 1 && j <= strlen(dst) - 1) {
		if (src[i] == dst[j]) {
			i++;
			j++;
		}
		else {
			i = 0;
			j = j - i + 1;
		}
	}
	if (src[i] == 0)
		return dst + j - strlen(src);
	return nullptr;
}

有什么不对的地方希望大家及时指出,一起交流进步,后续我会写一些关于数据结构的代码供大家参考~

猜你喜欢

转载自blog.csdn.net/A_luka/article/details/89298203
今日推荐