C语言常用字符串函数使用及模拟实现(strlen,strcat,strcpy,strcmp)

发布时间:2023-04-14 14:00

一、strlen

strlen函数用法:参数只有一个,传入指向字符串首地址的指针,返回该字符串长度(第一个字符到’\0’的长度)
注意事项:注意与sizeof(str)的区别,sizeof求大小,包括’\0’,strlen求长度,不包括’\0’。

//size_t strlen ( const char * str );标准库函数声明
sizt_t My_strlen(const char *str) {//模拟实现
	if (str == NULL) { //判断字符串是否为空
		return 0;
	}
	size_t lenth = 0;
	while (*str) { //字符串内容不为空('\0')长度加一,指针指向下一个字符
		lenth++;
		str++;
	}
	return lenth; //返回字符串长度
}

二、strcat

strcat用法:两个参数,第一个为目标字符串,第二个为需要拼接的字符串,将需要拼接的字符串拼接至目标字符串的后面,包括’\0’(目标字符串’\0’会被覆盖)
注意事项:使用时注意拼接字符串的大小,为目标字符串留够足够的位置。


//char * strcat ( char * destination, const char * source );
//标准库函数声明
char * My_strcat(char *des, const char *src)//模拟实现
{
	if (des == NULL || src == NULL) {//字符串判空
		return des;
	}
	char *p = des;
	while (*p) {//找到目标字符串的末尾
		p++;
	}
	while (*src) {//将需要拼接的字符串拼接至目标字符串
		*p++ = *src++;
	}
	*p = *src;//将'\0'拼接至字符串末尾
	return des;//返回目标字符串首地址
}

三、strcpy

strcpy用法:两个参数,第一个为目标字符串,第二个为需要拷贝的字符串,将需要拷贝的字符串拷贝到目标字符串,包括’\0’(完全覆盖目标字符串)
注意事项:使用时注意要拷贝字符串的大小,为目标字符串留够足够的位置。

//char * strcpy ( char * destination, const char * source );
//标准库函数声明
char * My_strcpy(char *des, const char *src) {//模拟实现
	if (des == NULL || src == NULL) {//字符串判空
		return des;
	}
	char *p = des;
	while (*src) {//将需要拷贝的字符串拷贝到目标字符串
		*p++ = *src++;
	}
	*p = *src;//将'\0'拷贝到字符串末尾
	return des;//返回目标字符串首地址
}

四、strcmp

strcmp用法:两个参数,比较字符串大小,每一个字符进行比较ASCII值,字符都相等则比较长度(其实还是比较ASCII,短的那个字符串末尾为’\0’,ASCII为0,与另一个字符串相对应的字符相比,只要那个字符不是’\0’,就是该字符大);第一个字符串大返回1,相等返回0,第二个字符串大返回-1
注意事项:注意返回值,相等为0

//int strcmp ( const char * str1, const char * str2 );
//标准库函数声明
int My_strcmp(char *p1, char *p2)//模拟实现
{
	assert(p1 != NULL);
	assert(p2 != NULL);//字符串判空
	int ret = 0;
	while (*p1 && *p2 && !ret) {//每一个字符比较,若一样则比较下一个
		ret = *p1 - *p2;
		p1++;
		p2++;
	}
	if (ret == 0) {     //ret == 0说明至少一个字符串已经遍历结束
		ret = *p1 - *p2;//结束的字符串的1‘\0’与另一个字符串比较
	}
	if (ret > 0) {//整理返回值(1,0,-1)
		return 1;
	}
	else if (ret == 0){
		return 0;
	}
	return -1;
}

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号