模拟实现strcpy()strcmp()strcat()

核心

  • strcpy() : 源字符串必须以 ‘\0’ 结束。 会将源字符串中的 ‘\0’ 拷贝到目标空间
  • strcmp() : 第一个字符串大于第二个字符串,则返回大于0的数字 第一个字符串等于第二个字符串,则返回0 第一个字符串小于第二个字符串,则返回小于0的数字
  • strcat() : 源字符串必须以 ‘\0’ 结束。 目标空间必须有足够的大,能容纳下源字符串的内容

实现

  • strcpy()
char* MyStrcpy(char* dest, char* src){
	assert(dest && src);
	char* p = dest;
	while (*src != '\0'){
		*dest = *src;
		dest++;
		src++;
	}
	*dest = '\0';
	return p;
}
int main () {
	char str1[100] = "asdfg";
	char str2[100] = "zxcvb";
	MyStrcpy(str1, str2);
	return 0;
}
  • strcmp()
int MyStrcmp(const char* str1, const char* str2){
	assert(str1 != NULL && str2 != NULL);
	while (*str1 != '\0' || *str2 != '\0'){
		if (*str1 - *str2 == 0){
			str1++;
			str2++;
			continue;
		}
		else if (*str1 - *str2 > 0){
			return 1;
		}
		else{
			return -1;
		}
	}
	return 0;
}
int main () {
	char* str1 = "asd";
	char* str2 = "asda";
	int ret = MyStrcmp(str1, str2);
	return 0;
}
  • strcat()
char* MyStrcat(char* str1, const char* str2){
	assert(str1 != NULL && str2 != NULL);
	char* p = str1;
	while (str1 != '\0'){
		str1++;
	}
	while (*str1++ = *str2++){
		;
	}
	return p;
}
int main () {
	char str1[100] = "asdfg";
	char str2[100] = "zxcvb";
	MyStrcat(str1, str2);
	return 0;
}
发布了60 篇原创文章 · 获赞 5 · 访问量 2650

猜你喜欢

转载自blog.csdn.net/qq_44905386/article/details/99856867