C语言中10种常见的字符串函数你都掌握了吗?

2024-02-26 1105阅读

温馨提示:这篇文章已超过431天没有更新,请注意相关的内容是否还可用!

目录

 ​编辑

1.strlen(字符串长度计算函数)

2.strcpy(字符串拷贝函数)

3.strcat(字符串追加函数)

4.strcmp(字符串大小比较函数)

5.strncpy(有限制的字符串拷贝函数)

6.strncat(有限制的字符串追加函数)

7.strncmp(有限制的字符串大小比较函数)

8.strstr(字符串查找函数)

9.strtok(字符串切割函数)

10.strerror(打印错误信息函数)

11.完结散花


 C语言中10种常见的字符串函数你都掌握了吗?

                           不是每个人都能做自己想做的事,成为自己想成为的人。

                                                  克心守己,律己则安!

创作不易,宝子们!如果这篇文章对你们有帮助的话,别忘了给个免费的赞哟~ 

1.strlen(字符串长度计算函数)

C语言中10种常见的字符串函数你都掌握了吗?

•字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包

含 '\0' )。

• 参数指向的字符串必须要以 '\0' 结束。

• 注意函数的返回值为size_t,是无符号的( 易错 )

• strlen的使用需要包含头⽂件
• 下面是strlen函数的模拟实现

1.方法一

int my_strlen(const char* str)
{
	assert(str);//判断指针的有效性
	int count = 0;
	while (*str)
	{
		str++;
		count++;
	}
	return count;
}

2.方法二

int my_strlen(const char* str)
{
	assert(str);//判断指针的有效性
	//不创建临时变量的计数器
	if (*str == '\0')
		return 0;
	else
		return  1 + my_strlen(str + 1);
}

3.方法三

int my_strlen(const char* str)
{
	assert(str);//判断指针的有效性
	const char* s = str;
	//指针减指针的方法
	while (*s)
	{
		s++;
	}
	return s - str;
}

下面是库里面strlen的实现方法

size_t __cdecl strlen (
        const char * str
        )
{
        const char *eos = str;
        while( *eos++ ) ;
        return( eos - str - 1 );
}

2.strcpy(字符串拷贝函数)

C语言中10种常见的字符串函数你都掌握了吗?

• 源字符串必须以 '\0' 结束。

• 会将源字符串中的 '\0' 拷贝到目标空间。

• 目标空间必须足够大,以确保能存放源字符串。

• 目标空间必须可修改。
• 下面是strcpy函数的模拟实现

char* my_strcpy(char* dest, const char* srs)
{
	assert(dest && srs);
	char* ret = dest;
	while (*dest++ = *srs++)
	{
		;
	}
	return ret;
}

3.strcat(字符串追加函数)

C语言中10种常见的字符串函数你都掌握了吗?

• 源字符串必须以 '\0' 结束。

• 目标字符串中也得有 \0 ,否则没办法知道追加从哪里开始。

• 目标空间必须有足够的大,能容纳下源字符串的内容。

• 目标空间必须可修改。
• 下面是strcpy函数的模拟实现

char* my_strcat(char* dest, const char* src)
{
	assert(dest && src);
	char* p = dest;
	while (*dest)
	{
		dest++;
	}
	while ((*dest++ = *src++))
	{
		;
	}
	return p;
}

下面是库里面strcat的实现代码~

char * __cdecl strcat (
        char * dst,
        const char * src
        )
{
        char * cp = dst;
        while( *cp )
                cp++;                   /* find end of dst */
        while((*cp++ = *src++) != '\0') ;       /* Copy src to end of dst */
        return( dst );                  /* return dst */
}

4.strcmp(字符串大小比较函数)

C语言中10种常见的字符串函数你都掌握了吗?

• 标准规定:

◦ 第⼀个字符串小于第⼆个字符串,则返回大于0的数字

◦ 第⼀个字符串等于第⼆个字符串,则返回0

◦ 第⼀个字符串小于第⼆个字符串,则返回小于0的数字

◦ 那么如何判断两个字符串?比较两个字符串中对应位置上字符ASCII码值的大小。
strcmp函数的模拟实现:

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;
}

下面是库里面strcmp的源代码

int __cdecl strcmp (
        const char * src,
        const char * dst
        )
{
        int ret = 0 ;
        while((ret = *(unsigned char *)src - *(unsigned char *)dst) == 0 && *dst)
                {
                ++src, ++dst;
                }
        return ((-ret)  
  
 

5.strncpy(有限制的字符串拷贝函数)

C语言中10种常见的字符串函数你都掌握了吗?

举个栗子啦~

#include 
#include 
int main()
{
	char str1[] = "To be or not to be";
	char str2[40];
	char str3[40];
	/* copy to sized buffer (overflow safe): */
	strncpy(str2, str1, sizeof(str2));
	/* partial copy (only 5 chars): */
	strncpy(str3, str2, 5);
	str3[5] = '\0';   /* null character manually added */
	puts(str1);
	puts(str2);
	puts(str3);
	return 0;
}

运行结果~

C语言中10种常见的字符串函数你都掌握了吗?

strncpy库里面的源代码如下啦~

char * __cdecl strncpy (
        char * dest,
        const char * source,
        size_t count
        )
{
        char *start = dest;
        while (count && (*dest++ = *source++) != '\0')    /* copy string */
                count--;
        if (count)                              /* pad out with zeroes */
                while (--count)
                        *dest++ = '\0';
        return(start);
}

6.strncat(有限制的字符串追加函数)

C语言中10种常见的字符串函数你都掌握了吗?

  举个栗子啦~

C语言中10种常见的字符串函数你都掌握了吗?

 库里面strncat的源代码在下面啦~

char * __cdecl strncat (
        char * front,
        const char * back,
        size_t count
        )
{
        char *start = front;
        while (*front++)
                ;
        front--;
        while (count--)
                if ((*front++ = *back++) == 0)
                        return(start);
        *front = '\0';
        return(start);
}

7.strncmp(有限制的字符串大小比较函数)

C语言中10种常见的字符串函数你都掌握了吗?

举个栗子啦~

#include 
#include 
int main ()
{
  char str[][5] = { "R2D2" , "C3PO" , "R2A6" };
  int n;
  puts ("Looking for R2 astromech droids...");
  for (n=0 ; n= 4 )
    {
        /* unroll by four */
        for (; x  

8.strstr(字符串查找函数)

C语言中10种常见的字符串函数你都掌握了吗?

举个栗子啦~

#include 
#include 
int main ()
{
  char str[] ="This is a simple string";
  char * pch;
  pch = strstr (str,"simple");
  if (pch != NULL)
    strncpy (pch,"sample",6);
  puts (str);
  return 0;
}

C语言中10种常见的字符串函数你都掌握了吗?

 strstr的模拟是实现~

char * strstr (const char * str1, const char * str2)
{
char *cp = (char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}

9.strtok(字符串切割函数)

C语言中10种常见的字符串函数你都掌握了吗?

举个栗子啦~

#include 
#include 
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;
}

 C语言中10种常见的字符串函数你都掌握了吗?

10.strerror(打印错误信息函数)

C语言中10种常见的字符串函数你都掌握了吗?

举个栗子啦~

#include 
#include 
#include 
int main ()
{
  FILE * pFile;
  pFile = fopen ("unexist.ent","r");
  if (pFile == NULL)
    printf ("Error opening file unexist.ent: %s\n",strerror(errno));
  return 0;
}

 C语言中10种常见的字符串函数你都掌握了吗?

11.完结散花

好了,这期的分享到这里就结束了~

如果这篇博客对你有帮助的话,可以用你们的小手指点一个免费的赞并收藏起来哟~

如果期待博主下期内容的话,可以点点关注,避免找不到我了呢~

我们下期不见不散~~

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]