字符串的详解及其模拟实现

字符串的详解及其模拟实现

字符串函数的总体概括

求字符串长度

  • strlen

长度不受限制的字符串函数

  • strcpy
  • strcat
  • strcmp

长度受限制的字符串函数介绍

  • strncpy
  • strncat
  • strncmp

字符串查找

  • strstr
  • strtok

错误信息报告

  • strerror

字符操作
内存操作函数

  • memcpy
  • memmove
  • memset
  • memcmp

上面的函数,我会一一的讲解并且模拟实现

strlen

解析

size_t strlen ( const char * str );

1.字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。
2.参数指向的字符串必须要以 ‘\0’ 结束。(不然会出现随机值)
3.注意函数的返回值为size_t,是无符号的( 易错 )

例:

因为strlen的返回值是无符号整形,所以输出的结果是>

模拟实现

计数器法
int my_strlen(char* dest)
{
	int c=0;
	while(*dest)
	{
		dest++;
		c++;
	}
	return c;
}
递归(当不能创造临时变量时的方法)

int my_strlen(char* dest)
{
if(*dest==’\0’)
return 0;
else
return 1+my_strlen(dest+1);
}

指针减指针
int my_strlen(char* dest)
{
	char* start=dest;
	while(*dest)
	dest++;
	return dest-start;
}

strcpy

解析

char* strcpy(char * destination, const char * source );
  • 源字符串必须以 ‘\0’ 结束
  • 会将源字符串中的 ‘\0’ 拷贝到目标空间。
  • 目标空间必须足够大,以确保能存放源字符串。
  • 目标空间必须可变(可以被改变)

模拟实现

在这里插入图片描述

strcat

解析

char * strcat ( char * destination, const char * source );
  • 功能:追加字符串到目标字符串上
  • 注意事项:源字符串必须以 ‘\0’ 结束。
  • 目标空间必须有足够的大,能容纳下源字符串的内容。
  • 目标空间必须可修改。

模拟实现

char* my_strcat(char* dest,const char* src)
{
	char* rem=dest;//保存起始地址
	assert(dest&&src);//防止为空指针
	while(*dest)//找到\0
	   dest++;
	while(*dest++=*src++);//追加
	return rem;//返回起始地址
}

strcmp

解析

int strcmp ( const char * str1, const char * str2 );
  • 标准规定:

  • 第一个字符串大于第二个字符串,则返回大于0的数字

  • 第一个字符串等于第二个字符串,则返回0

  • 第一个字符串小于第二个字符串,则返回小于0的数字

模拟实现

int my_strcmp(const char* str1,const char* str2)
{
	assert(str1&&str2);
	while(*str1==*str2)//先排除相同的
	{
		if(*str1=='\0')
		return 0;
		str1++;
		str2++;
	}
	return *str1-*str2;//比较并返回 
}

strncpy

解析

char * strncpy ( char * destination, const char * source, size_t num );
  • 拷贝num个字符从源字符串到目标空间。
  • 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加’\0’,直到num个。

strncat

解析

char * strncat ( char * destination, const char * source, size_t num );
  • 追加num个字符从源字符串到目标空间。

  • num超过source的长度时,只会追加source字符串到目标字符串中

strncmp

解析

int strncmp ( const char * str1, const char * str2, size_t num );
  • 比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。

strstr(字符串查找函数)

解析

char * strstr ( const char *str2, const char * str1);
  • 从str1中找字符串str2,如果找到,返回str2在str1中所在地址,如果没找到,返回空指针。

模拟实现

char* mystrstr(const char* str1,const char* str2)
{
	assert(str1,str2);
	const char* a=const char* str1;//使用3个指针
	const char* b=const char* str2;
	const char* c=const char* str1;
	if(*str2==' ')
	return str1;
	while(*a!='\0')
	{
		b=str2;
		c=a;
		while(*b&&*c&&*b==*c)
		{
			b++;
			c++;
		}
		if(*b=='\0')
		return a;
		a++;
	}
	return NULL;
}
  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值