【C语言】字符串函数介绍

本文详细介绍了C语言中的strlen、strcpy、strncpy、strcmp、strncmp、strcat、strncat、strstr、strtok和strerror等字符串处理函数的作用、接口和实现,帮助读者理解和掌握这些基本的字符串操作。
摘要由CSDN通过智能技术生成

目录

 1、strlen

2、strcpy 

3、strncpy 

4、strcmp 

5、strncmp  

模拟实现strncmp:

6、strcat 

7、strncat  

 8、strstr

strtok和strerror函数仅作了解: 

9、strtok

 10、strerror


 1、strlen

  • 作用:计算字符串的长度,即不包括空字符的字符数。
  • 函数接口:size_t strlen(const char* str)
  • 参数描述:接受一个指向以空字符结尾的字符串的指针 str
  • 返回值:返回字符串的长度,即字符数。

模拟实现strlen:

int my_strlen(const char* str)
{
    assert(str != NULL);
	if (*str=='\0')
		return 0;
	return 1 + my_strlen(str + 1);
}

2、strcpy 

  • 作用:将一个字符串复制到另一个字符串中。
  • 函数接口:char* strcpy(char* destination, const char* source)
  • 参数描述:接受一个指向目标字符串的指针 destination 和一个指向源字符串的指针 source
  • 返回值:返回指向目标字符串的指针。

模拟实现strcpy:

char* my_strcpy( char* str1,const char* str2)
{
	char* str = str1;
	assert(str1 != NULL);
	assert(str2 != NULL);
	while (*str1 = *str2)
	{
		str1++;
		str2++;
	}
	return str;
}

3、strncpy 

  • 作用:将一个字符串的指定长度复制到另一个字符串中。如果源字符串长度不足,则使用空字符填充。
  • 函数接口:char* strncpy(char* destination, const char* source, size_t num)
  • 参数描述:接受一个指向目标字符串的指针 destination,一个指向源字符串的指针 source,以及要复制的字符数 num
  • 返回值:返回指向目标字符串的指针。

 模拟实现strncpy:

char* my_strncpy(char* str1, const char* str2, size_t num)
{
	char* str = str1;
	assert(str1 != NULL);
	assert(str2 != NULL);
	while (num--)
	{
		*str1++ = *str2++;
	}
	return str;
}

4、strcmp 

  • 作用:比较两个字符串是否相等。
  • 函数接口:int strcmp(const char* str1, const char* str2)
  • 参数描述:接受两个指向要比较的字符串的指针 str1 和 str2
  • 返回值:如果字符串相等,则返回 0;如果 str1 小于 str2,则返回一个负值;如果 str1 大于 str2,则返回一个正值。

 模拟实现strcmp:

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

5、strncmp  

  • 作用:比较两个字符串的前 n 个字符是否相等。
  • 函数接口:int strncmp(const char* str1, const char* str2, size_t num)
  • 参数描述:接受两个指向要比较的字符串的指针 str1 和 str2,以及要比较的字符数 num
  • 返回值:如果前 num 个字符相等,则返回 0;如果 str1 小于 str2,则返回一个负值;如果 str1 大于 str2,则返回一个正值。

模拟实现strncmp:

int my_strncmp(const char* str1,const char* str2, size_t num)
{
	assert(str1!=NULL);
	assert(str2!=NULL);
	while (*str1 == *str2 && *str1 && --num)
	{
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

6、strcat 

  • 作用:将一个字符串连接到另一个字符串的末尾。
  • 函数接口:char* strcat(char* destination, const char* source)
  • 参数描述:接受一个指向目标字符串的指针 destination 和一个指向源字符串的指针 source
  • 返回值:返回指向目标字符串的指针,即连接后的字符串。

 模拟实现strcat:

char* my_strcat(char* str1, const char* str2)
{
	char* str = str1;
	assert(str1 != NULL);
	assert(str2 != NULL);
	while (*str1)
	{
		str1++;
	}
	while (*str1 = *str2)
	{
		str1++;
		str2++;
	}
	return str;
}

7、strncat  

  • 作用:将一个字符串的指定长度连接到另一个字符串的末尾。
  • 函数接口:char* strncat(char* destination, const char* source, size_t num)
  • 参数描述:接受一个指向目标字符串的指针 destination,一个指向源字符串的指针 source,以及要连接的字符数 num
  • 返回值:返回指向目标字符串的指针,即连接后的字符串。

模拟实现strncat:

char* my_strncat(char* str1, const char* str2, size_t num)
{
	char* str = str1;
	assert(str1 != NULL);
	assert(str2 != NULL);
	while (*str1)
	{
		str1++;
	}
	while (*str2 && num--)
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	*str1 = '\0';
	return str;
}

 8、strstr

  • 作用:在一个字符串中搜索子字符串的第一次出现。
  • 函数接口:char* strstr(const char* str1, const char* str2)
  • 参数描述:接受两个指向要搜索的字符串的指针 str1 和 str2
  • 返回值:如果 str2 是 str1 的子字符串,返回第一次出现的位置的指针;如果未找到,则返回 NULL。

模拟实现strstr:

char* my_strstr(const char* str1, const char* str2)
{
	char* str = (char*)str1;
	char* s1 = NULL;
	char* s2 = NULL;
	assert(str1 != NULL);
	assert(str2 != NULL);
	while (*str)
	{
		s1 = str;
		s2 = (char*)str2;
		while (*s1 == *s2&&*s1&&*s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return str;
		}
		str++;
	}
	return NULL;
}
strtok和strerror函数仅作了解: 

9、strtok

  • 作用:将一个字符串分割为多个子字符串,利用分隔符进行分割。
  • 函数接口:char* strtok(char* str, const char* delimiters)
  • 参数描述:接受一个指向要分割的字符串的指针 str,以及包含分隔符的字符串 delimiters
  • 返回值:如果找到了下一个分割出的子字符串,返回其指针;如果已经没有更多子字符串,则返回 NULL。注意,第一次调用时需要将 str 传入,后续调用只需要将 str 参数设为 NULL。

strtok函数的使用:

#include <stdio.h>
#include <string.h>
int main ()
{
  char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
 {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
 }
  return 0;
}

 10、strerror

  • 作用:返回指定错误代码对应的错误消息字符串。
  • 函数接口:char* strerror(int errnum)
  • 参数描述:接受一个整型参数 errnum,表示错误代码。
  • 返回值:返回表示错误代码 errnum 的错误消息字符串。

——————————————如有错误,欢迎大家指正。 ————————————————

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这题怎么做?!?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值