代码编织梦想

面试中常常要求写一些基本的库函数,尤其以字符串库函数考的最多,本文汇总了一些常见的字符串库函数。

一般地,使用这些函数,需要包含头文件:

#include <string.h>

一、strlen

函数功能:

求字符串长度的函数。

函数原型:

size_t strlen ( const char * str );

函数说明:

  • 字符串以'\0'作为结束标志,strlen函数返回的是字符串'\0'前面出现的字符个数(不包括'\0')
  • 函数的返回值为size_t,是无符号的

下面通过一个例子解释返回值是无符号这个概念:

#include <stdio.h>
#include <string.h>
int main()
{
	const char* str1 = "abcdef";
	const char* str2 = "bbb";
	if (strlen(str2) - strlen(str1) > 0)
	{
		printf("hello\n");
	}
	else
	{
		printf("hallo\n");
	}
	return 0;
}

结果如下: 

因为strlen函数的返回值是无符号的,所以strlen(str2)-strlen(str1)的结果为3,故输出的结果为hello。

模拟实现:

#include <stdio.h>
#include <assert.h>

int my_strlen(const char *p)
{
	assert(p); //判断指针是否为空
	int count = 0;
	while (*p != '\0') 
	{
		count++;
		p++;
	}
	return count;
}
int main()
{
	char arr[] = "abcdef";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

二、strcpy

字符串复制函数。

函数功能:

将源字符串拷贝到目标空间中。

函数原型:

char* strcpy(char * destination, const char * source );

函数说明:

  • 源字符串必须以'\0'结束
  • 目标空间必须可变并且足够大,从而确保可以存放源字符串
  • 拷贝时,源字符串中的'\0'会被拷贝到目标空间中 

模拟实现:

#include <stdio.h>
#include <assert.h>

char * my_strcpy(char* dest, const char* src)
{
	assert(dest != NULL); //判断指针是否为空
	assert(src != NULL);
	char * ret = dest;
	while (*dest++ = *src++) //拷贝src指向的字符串到dest指向的空间
	{
		;
	}
	//返回目的空间起始位置
	return ret;
}
int main()
{
	char arr1[] = "abcdef"; //目标空间必须足够大
	char arr2[] = "bit";
	my_strcpy(arr1, arr2);
	printf("%s\n",arr1);
	return 0;
}

三、strcat

字符串追加函数。 

函数原型:

char * strcat ( char * destination, const char * source );

函数说明:

  • 源字符串必须以'\0'结束
  • 目标空间必须可变并且足够大,从而确保可以存放源字符串
  • 追加时,是从目标空间的'\0'处开始追加

那么,字符串可以给自己 追加吗?答案是 否定的。(可以用strncat实现)

因为:

自己给自己追加时,例如字符串“abcdef”,实际上是abcdef\0,那么在自己给自己追加的时候,把a放到\0的位置,b,c,d,e,f一次放到后面,之后发现\0不在了,已经被改成a了,没有\0(没有到结束位置),没办法停止,故程序会崩溃。

模拟实现: 

#include <stdio.h>
#include <assert.h>

char * my_strcat(char* dest, const char* src)
{
	assert(dest);
	assert(src);
	char* ret = dest;
	while (*dest)  //找到目标字符串中'\0'
	{
		dest++; 
	}
	while (*dest++ = *src++) //追加
	{
		;
	}
	return ret;
}
int main()
{
	//在数组arr1后面追加字符串arr2
	char arr1[10] = "abc";
	char arr2[] = "bcd";
	printf("%s\n", my_strcat(arr1, arr2));
	return 0;
}

四、strcmp

字符串比较函数。

函数说明:

  • 通过比较字串中各个字符的ASCII码,来比较参数str1和str2字符串,比较时考虑字符的大小写
  • 字符串str1大于str2,返回大于0的数字;字符串str1等于str2,返回0;字符串str1小于str2,返回小于0的数字

函数原型:

int strcmp ( const char * str1, const char * str2 );

模拟实现:

#include <stdio.h>
#include <assert.h>

int my_strcmp(const char* dest, const char* src)
{
	assert(dest != NULL);
	assert(src != NULL);
	while (*dest == *src)
	{
		if (*dest == '\0')
		{
			return 0; //两个字符串相等
		}
		dest++;
		src++;
	}
	if (*dest > *src)
	{
		return 1;//大于
	}
	else
	{
		return -1;//小于
	}
}
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abd";
	int ret = my_strcmp(arr1, arr2);
	printf("ret=%d\n", ret);
	return 0;
}

 五、strstr

找出str1字符串在str2字符串中第一次出现的位置(不包括str1的’\0’)。

函数原型:

char * strstr ( const char *str2, const char * str1);
  • strstr 返回该位置的指针,如找不到,返回空指针。

 模拟实现:

#include <stdio.h>
#include <assert.h>

char * my_strstr(const char* dest, const char* src)
{
	assert(dest); //判断指针是否为空
	assert(src);
	char* ret1 = dest; 
	char* ret2 = src;
	char* cur = dest;
	if (*src == '\0')
	{
		return dest; //如果需要查找的字符串arr2为空,那么返回字符串arr1的首地址
	}
	while (*dest)
	{
		ret1 = cur;
		ret2 = src;
		while ((*ret1 != '\0') && (*ret2 != '\0') && (*ret1 == *ret2))
		{
			ret1++;
			ret2++;
		}
		if (*dest == "\0")
		{
			return ret1;
		}
		cur++;
	}
	return NULL;
}
int main()
{
	char arr1[] = "abccdef";
	char arr2[] = "cde";
	char * ret = my_strstr(arr1, arr2); //查找arr2字符串是否在arr1字符串中
	if (ret == NULL)
	{
		printf("Ӵ\n");
	}
	else
	{
		printf("%s\n",ret);
	}
	return 0;
}

六、strncpy 

函数原型:

char * strncpy ( char * destination, const char * source, size_t num );

函数说明:

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

函数实现:

#include <stdio.h>
#include <string.h>
 
int main()
{
    char arr1[10] = "abcdef";
    char arr2[] = "bit";
    strncpy(arr1, arr2, 6);
    return(0);
}

七、strncat

函数原型:

char * strncat ( char * destination, const char * source, size_t num );

函数功能:

把source所指字符串的前n个字符添加到destination结尾处(覆盖dest结尾处的’\0’),并添加’\0’ 。

函数说明:

  • source和destination所指内存区域不能重叠
  • destination必须有足够的空间来容纳source的字符串

函数实现:

#include <stdio.h>
#include <string.h>
int main ()
{ 
    char str1[20];
    char str2[20]; 
    strcpy (str1,"To be "); 
    strcpy (str2,"or not to be");
    strncat (str1, str2, 6); 
    puts (str1); 
    return 0;
}

八、strncmp

函数原型:

int strncmp ( const char * str1, const char * str2, size_t num );

函数功能:

比较字符串str1和str2的前num个字符。

函数说明:

如果前num字节完全相等,返回值就为0;在前num字节比较过程中,如果出现*str1与*str2不等,则返回(*str1-*str2)。

函数实现:

#include <stdio.h>
#include <string.h>

int main()
{
	const char *p1 = "abczdef";
	char *p2 = "abcqwer";
	int ret = strncmp(p1, p2, 4);
	printf("%d\n", ret);
	return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_58802755/article/details/120386145

c/c++ 对常见字符串库函数的实现-爱代码爱编程

在c中的string.h头文件中存在很多对字符串进行操作的函数,利用这些函数可以方便的对字符串进行操作。下面将对常见的字符串函数进行解释和实现。 strcpy 函数原型:char* _strcpy(char* dest,

c语言字符串库函数详解_linxi8693的博客-爱代码爱编程_c语言字符串函数库

1)字符串操作 复制     strcpy(p, p1)         复制字符串     strncpy(p, p1, n)         复制指定长度字符串 增加         strcat(p, p1)         附加字符串     strncat(p, p1, n)         附加指定长度字符串 截取         st

字符串库函数_imeant的博客-爱代码爱编程_字符串库函数

头文件: 1.strlen函数:求字符串的长度 size_t strlen(const char *s) { size_t len = 0; while(*s++) len++; return len;

c语言中一些有关于字符串的库函数 ( 源函数 )_dyson~的博客-爱代码爱编程_c++源函数

strlen  计算字符串大小 // 计数器方法 int my_strlen(const char * str) { int count = 0; while(*str) { count++; str++;

字符库函数_王翔乐的博客-爱代码爱编程

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> #include<assert.h> /* void *memcpy(void *dest,const void *src, int count ); count:字节数

常用字符串库函数总结-爱代码爱编程

本文转自https://blog.csdn.net/sharon_1987/article/details/50022855 本文与原文内容没有差别,但是由于本人比较注重颜值还有阅读体验(自认为这样可能阅读起来会舒服点),就...又给排版了一下,也算参与博客创作了(重在参与重在参与); 本文主要是粗略的介绍了各个字符库函数的大致用法,总结感觉

编程小白C语言#include「string.h」常用总结-爱代码爱编程

简单介绍 C语言里关于字符数组的函数定义的头文件,常用函数有 strlen(求字符串长度),strcmp(比较两个字符串是否一样),strcpy(字符串拷贝操作),strcat(字符串连接操作)等等,更详细的可以到include文件夹里查看该文件 strlen(求字符串长度) strlen所作的是一个计数器的工作,它从内存的某个位置(

常用的字符串函数(<string.h>库函数)-爱代码爱编程

文章目录 前言一、长度不受限制的字符串函数1、 strlen()函数2、strcpy函数3、strcat()函数4、strcmp()函数二、长度受限制的字符串函数1、strncpy()函数2、strncat()函数3、strncmp()函数4、strstr()函数5、strtok()函数6、strerror()函数总结 前言 字符串是我

编写程序:输入多个字符串,输出其中最短的字符串-爱代码爱编程

编写程序:输入多个字符串,输出其中最短的字符串。 使用的是Start Experimental Instance of Visual Studio 2019 代码 #include<stdio.h> #include<string.h> int main() { char a[80][80], mini[80]; int

常用字符函数和字符串函数的最简单明了的讲解和代码演示-爱代码爱编程

求字符串长度: strlen: 注意事项: 字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。参数指向的字符串必须要以 ‘\0’ 结束。注意函数的返回值为size_t,是无符号的#include <stdio.h> int main() { const c

C语言常用字符串库函数总结-爱代码爱编程

C语言常用字符串库函数总结 C语言常用字符串库函数总结 新人报道,总结一下C语言字符串库函数的使用,一方面是和大家分享,一方面也是为了加深记忆,主要参考《C和指针》一书,若有描述不当,望指教。1、 字符串基础 C语言不像其他编程语言有专门的字符串类型,C语言的字符串一般是存于字符数组或由字符指针表示,字符串是指一串零个或多个字符,并且以一个位模式为全

【C语言】常见字符串库函数的使用与实现-爱代码爱编程

目录 字符串有关库函数介绍及使用简述1.strlen的使用及实现2.strcmp的使用及实现3.strcpy的使用及实现4.strcat的使用及实现5.strstr的使用及实现6.strncat的使用及实现7.strncpy的使用及实现8.strncmp的使用及实现9.strtok的使用10.strerror的使用 字符串有关库函数介绍及使用

字符串库函数详解-爱代码爱编程

字符串库函数详解(上) 一.strlen函数 strlen函数求字符串长度在这里插入代码片 #include<stdio.h> #include<string.h> int main(){ char str[1024]={0}; printf("请输入字符串:"); gets(str); printf("%d\n",strlen