【C语言】字符函数

1.strlen函数

1.1函数认识

在这里插入图片描述

size_t strlen ( const char * str );

strlen:计算字符串的长度。
字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。
参数指向的字符串必须要以 ‘\0’ 结束。
注意函数的返回值为size_t,是无符号的。

1.2函数的模拟实现

接下来让我们来模拟实现strlen函数。

size_t my_strlen(const char* str)
{
	int ret = 0;
	char* s = str;
	while (*s)
	{
		ret++;
		s++;
	}
	return ret;
}

1.3 strlen和sizeof的区别

sizeof函数也可以计算字符串长度,那为什么还会有strlen函数呢?
这是因为在计算字符串长度中sizeof和strlen是有一些不同的。

int main()
{
	char a[] = "abcdef";
	int ret1 = strlen(a);
	int ret2 = sizeof(a);
	printf("%d\n", ret1);
	printf("%d\n", ret2);
	return 0;
}

在这里插入图片描述
我们可以发现sizeof计算字符串长度比strlen多1。
这是因为字符串在存储时是以’\0’结尾的,sizeof在计算时会将字符’\0’也计算进去。
而strlen是遇到’\0’就停止计算,没有将’\0’计算进去。

2.strcpy函数

2.1函数认识

在这里插入图片描述
strcpy:将字符串拷贝到目的空间中。
源字符串必须以 ‘\0’ 结束。
会将源字符串中的 ‘\0’ 拷贝到目标空间。
目标空间必须足够大,以确保能存放源字符串。
目标空间必须可变。

2.2函数的模拟实现

下面是strcpy函数的模拟实现代码:

void my_strcpy(char* arr1, const char* arr2)
{
	char* p = arr1;
	while (*arr1++ = *arr2++)
	{
		;
	}	
}

3.strcat函数

3.1函数认识

在这里插入图片描述
strcat:将源字符串和目的空间的字符串拼接,并将拼接后的字符串放在目的空间中。
源字符串必须以 ‘\0’ 结束。
目标空间必须有足够的大,能容纳下源字符串的内容。
目标空间必须可修改。

3.2函数的模拟实现

下面是strcat函数的模拟实现代码:

char* my_strcat(char* arr1, const char* arr2)	
{
	char* str1 = arr1;
	char* str2 = arr2;
	while (*str1)
	{
		str1++;
	}
	while (*str2)
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	return arr1;
}

4.strcmp函数

4.1函数认识

在这里插入图片描述

strcmp:字符串比较函数

标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字

那么字符是如何进行判断的呢?
其实字符在内存中是以ASCll码值存储的
在这里插入图片描述
字符串在比较时是先比较第一个字符的ASCll码值,如果相同就比较下一个字符,直到比较到不同字符或者字符结束。

4.2函数的模拟实现

下面是strcmp的模拟实现代码:

int my_strcmp(const char* str1, const char* str2)	
{
	while (*str1 == *str2)
	{
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

5.strncpy函数

5.1函数认识

在这里插入图片描述

strncpy:拷贝num个字符从源字符串到目标空间。
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

5.2函数的模拟实现

下面是strncpy的模拟实现代码:

char* my_strncpy(char* arr1, const char* arr2, int n)
{
	char* str = arr1;
	int i = 0;
	for (i = 0; i < n; i++)
	{
		* (arr1 + i) = *(arr2 + i);
	}
	return str;
}

6.strncat函数

6.1函数认识

在这里插入图片描述
strncat:将源字符串中num个字符与目的空间中的字符串拼接,将拼接后的字符串放到目的空间中。

6.2函数的模拟实现

下面是strncat的模拟实现代码:

char* my_strncat(char* arr1, const char* arr2, int n)
{
	char* ret = arr1;
	while (*arr1)
	{
		arr1++;
	}
	int i = 0;
	for (i = 0; i < n; i++)
	{
		*(arr1 + i) = *(arr2 + i);
	}
	return ret;
}

7.strncmp函数

7.1函数认识

在这里插入图片描述
strncmp:比较两个字符串中的前num个字符。
比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。

7.2函数的模拟实现

下面是strncmp的模拟实现代码:

int my_strncmp(const char* str1, const char* str2, int n)
{
	while ((*str1 == *str2)&&(n))
	{
		str1++;
		str2++;
		n--;
	}
	return *str1 - *str2;
}

8.strstr函数

8.1函数认识

在这里插入图片描述
strstr:判断目的字符串中是否存在源字符串,若存在,返回目的字符串中源字符串的起始地址,不存在,则返回空指针。

8.2函数的模拟实现

下面是strstr的模拟实现代码:

char* mystrstr(const char* str1, const char* str2)
{
	char* cp = str1;
	char* s1 = cp;
	char* s2 = str2;
	if (*s2 == '\0')
		return NULL;
	while (*cp)
	{
		s1 = cp;
		s2 = str2;
		while (*s1 && *s2 && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
			return cp;
		cp++;
	}
	return NULL;
}

9.strtok函数

char * strtok ( char * str, const char * sep );

  • sep参数是个字符串,定义了用作分隔符的字符集合。
  • 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
  • strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
  • strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
  • strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
  • 如果字符串中不存在更多的标记,则返回 NULL 指针。

10.strerror函数

在这里插入图片描述
strerror:返回错误码所对应的信息。

字符分类函数:
在这里插入图片描述

字符转换:

int tolower ( int c );
int toupper ( int c);

以上就是本篇文章所讲的内容,如果有什么问题请指出,我会进行改正!欢迎大家在评论区进行留言讨论!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值