C语言基础——自我实现string.h库函数相关内容

自我实现string.h库函数相关内容

一、求字符串长度:strlen();

库函数中为size_t strlen ( const char * str );

参数 str 为一个指向一个字符串的 const char*型的指针,返回值为该字符串的长度('\0'不算在其中)(size_t为无符号整型)。

下面自行实现该函数:

size_t myStrlen(const char* str){
	if (str == NULL){
		return 0;
	}
	size_t len = 0;
	while (*str != '\0') {
		len++;
		str++;
	}
	return len;
}

二、在字符串后面追加内容:strcat();

库函数中为char * strcat ( char * destination, const char * source );

 把 sour 所指向的字符串追加到 dest 所指向的字符串的结尾(会在 dest 的结尾追加'\0'),该函数返回一个指向最终的目标字符串 dest 的指针。

下面自行实现该函数:

char* myStrcat(char* dest, const char* sour){
	if (sour == NULL || dest == NULL){
		return NULL;
	}
	char* p = dest;
	while (*p != '\0'){
		p++;
	}
	while (*sour != '\0'){
		*p = *sour;
		p++;
		sour++;
	}
	*p = '\0';
	return dest;
}

三、字符串拷贝:strcpy();

库函数中为char * strcpy ( char * destination, const char * source );

 把 src 所指向的字符串复制到 dest 中,该函数返回一个指向最终的目标字符串 dest 的指针。

下面自行实现该函数:

char* myStrcpy(char* dest, const char* sour){
	if (dest == NULL || sour == NULL){
		return NULL;
	}
	char* p = dest;
	while (*sour != '\0'){
		*p = *sour;
		p++;
		sour++;
	}
	*p = '\0';
	return dest;
}

四、字符串比较大小:strcmp();

库函数为int strcmp ( const char * str1, const char * str2 );

比较 str1 和 str2 的字典序,若 str1 >str2 返回一个大于0的数,若 str1 < str2 返回一个小于0的数,若 str1 == str2 返回0;

下面自行实现该函数:

int myStrcmp(const char* str1, const char* str2){
	assert(str1 != NULL&&str2 != NULL);//注意assert()需要引入头文件assert.h
	while (*str1 != '\0' || *str2 != '\0'){
		if (*str1 > *str2){
			return 1;
		}
		else if (*str1 < *str2){
			return -1;
		}
		str1++;
		str2++;
	}
	return (int)(*str1 - *str2);
	//下面这种方法也可以
	//if (*str1 == '\0'&&*str2 == '\0'){
	//	return 0;
	//}
	//if (*str1 == '\0'){
	//	return -1;
	//}
	//	return 1;
}

五、在字符串中查找子串:strstr();

库函数中为char * strstr ( char * str1, const char * str2 );

在字符串 str1 中查找第一次出现字符串 str2 的位置,若找到,则返回 str1 中第一次出现 str2 的位置;未找到则返回NULL。

下面自行实现该函数:

char* myStrstr(char* str1, char* str2){
	if (str1 == NULL || str2 == NULL){
		return NULL;
	}
	char* p1 = str1;
	char* p2 = str2;
	char* p3 = p1;
	while (*p1 != '\0'){
		p3 = p1;
		p2 = str2;
		while (*p2 != '\0'&&*p3 != '\0'){
			if (*p2 == *p3){
				p2++;
				p3++;
			}
			else{
				break;
			}
		}
		//找到了
		if (*p2 == '\0'){
			return p1;
		}
		p1++;
	}
	return NULL;
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值