详细介绍五种常用字符串库函数 以及对库函数的模拟实现

这篇具有很好参考价值的文章主要介绍了详细介绍五种常用字符串库函数 以及对库函数的模拟实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文介绍了strlen.strcpy.strcmp.strcat.strstr五大字符串库函数及使用自定义函数模拟实现这五个字符串库函数.学会使用字符串库函数,在处理字符串时会事半功倍…

一.字符串函数介绍

使用字符串库函数首先需要包含字符串头文件->#include<string.h>
这篇博客中详细介绍到了函数->库函数和自定义函数

1.strlen计算字符串中字符个数函数

strlen为计数字符串中字符个数的函数
因为字符串是以’\0’结束的,计算的是字符串里’\0’前面所有的字符个数

①.strlen库函数的诞生

C语言中"abc"双引号括起来的字符被当作字符串abc,是由多个字符连接在一起形成一种数据,而在一些场景中如逆置字符串,
我们需要得到字符串中字符的个数,现在abc这个字符肉眼一下可以看出字符个数是3,但是字符个数多的时候无法一下看清,并且字符串字符个数可能根据实际情况发生变化,
如何用一种方法直接实现得到这个字符串里的字符个数因此封装设计了strlen这个库函数

②.strlen库函数介绍

右边是官网库函数strlen的描述->strlen详细信息
详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

函数返回类型是一个无符号整形(因为字符个数没有负数)
函数形参是字符指针变量,接受的实参是字符串起始第一个字符地址

字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )

③strlen库函数使用

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

上面实现的是将字符串赋给一个字符数组,而arr为数组名,单独使用表示的是数组首元素地址即字符a在数组里的地址,使用strlen计算出字符a开始往后的字符个数计算到直到\0为止得出了字符串字符个数为8

④strlen库函数使用注意事项

.strlen使用后返回的是无符号整数
strlen不会修改字符串的内容
strlen计算的字符数组里如果没有\0结束标志会继续往后寻找\0会造成越界访问 直到在内存空间里找到\0后返回\0前所有字符个数,结果就会发生随机值

2.strcpy字符串拷贝函数

strcpy库函数实现将一个字符串拷贝(复制)给另一个字符串常用于在数组里的字符串拷贝

①.strcpy库函数的诞生

当有两个字符数组arr,str存了两个字符串时,
想要str数组里的字符串赋给arr数组时,当我们写出arr=str 是不正确的,因为数组名单独使用表示的是数组首元素地址, 两个地址都是不可更改的,
更不能用这种方法实现拷贝,需要通过数组里面所有字符的地址解引用得到字符然后一一赋值,实现字符串拷贝
,因此封装设计了strcpy库函数

②.strcpy库函数介绍

strcpy库函数官网详细介绍->strcpy
详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

strcpy库函数 有两个形参,第一个是目的地字符指针变量,第二个是源头字符指针变量,表示将源头指向的数组里的字符串拷贝到目的地字符指针指向的数组里
返回类型是目的地数组第一个字符指针,即拷贝到目的地的数组后返回拷贝完后的数组起始地址

③.strcpy函数的使用

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

通过两个数组名即数组首元素地址传参调用strcpy函数 实现将第二个数组里的字符串拷贝到第一个数组里,再通过数组名打印拷贝前后的数组内容.

④.strcpy库函数使用注意事项

源字符串必须以 ‘\0’ 结束。
会将源字符串中的 ‘\0’ 拷贝到目标空间。
strcpy会修改第一个字符串的内容
目标空间必须足够大,以确保能存放源字符串。
目标空间必须可变

3.strcmp字符串比较函数

用来比较两个字符串的大小

①.strcmp库函数的诞生

当我们需要比较两个字符串大小时,而字符串需要赋值到数组里或字符指针变量里仅仅用字符指针或者数组名 用==比较时是不正确的,
他们只是代表着字符串起始字符的地址不能用等号,需要通过指针指向字符串每个字符一一比较,实现这种功能最后封装设计了strcmp库函数

②.strcmp库函数的介绍

strcmp库函数官网详细介绍->strcmp
详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

strcmp实现有两个形参,分别对应着要比较的字符串的起始字符地址
返回类型是一个整形,用来判断两个字符串大小的标准
标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字

③strcmp库函数的使用

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法
arr数组和str数组接受了两个字符串 ,通过数组名即各字符串首字符地址传参调用strcmp函数 进行比较两个数组里每个字符的大小,直到\0为止两个字符串都相等则返回0,期间arr有字符大于str则返回大于0的数,反之返回小于0的数,通过if判断得到两个字符串的比较情况

④strcmp库函数使用注意事项

比较两个字符串是每个字符串相对应的字符大小,直到比较到\0后停止或则期间字符大小不同后
strcmp不会更改两个字符串内容
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字

4.strcat字符串追加函数

用于将一个字符串追加到另一个字符串后面,将两个字符串合成一个字符串

①.strcat库函数的诞生

当我们想把两个字符串合在一起形成一个新的字符串,实
现这一功能用普通的赋值表达式是实现不了的,实现相应功能需要很多步骤,
需要先拿到被追加的字符串的\0再这个基础上往后赋上字符串的每个字符
而将这些步骤封装成一个函数,最后为了每次想追加字符串时不用自己再写一个类似函数 ,封装设计成了库函数

②.strcat库函数的介绍

strcat官网详细介绍->strcat

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

strcat库函数介绍有两个形参,第一个是目的地表示要被追加的字符串起始字符指针,
第二个参数是源头要追加过去的字符串的起始字符指针
返回的是被追加后的字符串的起始字符指针

③.strcat库函数的使用

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

arr数组存放着字符串"abc"但是数组容量是7个字符,因为追加后数组必须得容纳两个字符串所有字符的个数,
str数组存放字符串"def",arr和str数组名即两个字符串首字符地址传参调用strcat函数
实现将str里的字符串放到arr字符串后面,
再通过打印arr得到追加前和追加后的字符串内容发现完成了追加

④.strcat库函数的使用注意事项

源字符串必须以 ‘\0’ 结束。
追加字符串会修改目的地原字符串即后面多了第二个字符串内容
目标空间必须有足够的大,能容纳下源字符串的内容。
目标空间必须可修改。

5.strstr判断是否存在子字符串函数

判断一个字符串里是否存在另一个字符串.

①.strstr库函数的诞生

字符串有各种个样,为了[]判断两个字符串间是否存在子集关系,即第一个字符串里是否完全包含第二个字符串功能.封装设计了strstr库函数

②.strstr库函数的介绍

strstr’库函数官网详细介绍->strstr
详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

strstr库函数 有两个形参,第一个是被查找的是否存在子集字符串,第二个是子集字符串,即判断在第一个字符串里是否存在第二个字符串
返回类型是一个字符指针,
设计规定:当第一个字符串中存在第二个字符串,则返回第二个字符串在第一个字符串里第一次出现处第二个字符串第一个字符的地址
如果不存在则返回NULL空指针

③strstr库函数的使用

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

arr存放"abcabc",str数组存放"bc",显然字符串bc是字符串abcabc子集
并且arr数组里字符串有两个bc,但是最后通过打印返回的指针发现得到的是第一个字符串里 第一个ac字符串的a地址 ,输出了bcabc

④.strstr库函数的使用注意事项

strstr库函数使用不会改变两个字符串的字符
存在子集关系返回字符串里第一个字符串内第一个与第二个字符串相等的字符串首字符地址
不存在则返回空指针NULL

二.字符串函数模拟实现

根据字符串函数相对应的功能,模拟实现功能相似的自定义函数…

1.strlen库函数模拟实现

①计数器方式模拟实现strlen

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

使用count作为计数器的方式 存储字符串里的字符个数最后返回
my_strlen实现了和strlen一样的功能

②.指针减指针方式模拟实现strlen

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

采用两个指针相减得到期间的元素个数 即字符串的字符个数

③.用递归方式模拟实现strlen

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

采用递归,层层每次加1调用自身指针加1直到arr为\0时开始返回将期间加的1累计起来最后得到字符串的字符个数返回

2.strcpy字符串拷贝函数模拟实现

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

在表达式里 实现的将当前str指向的字符 赋给arr指向的空间
然后两个指针都指向下一个空间然后 表示为真进入循环 ,
当最后str指向的是\0赋值给arr指向的空间后表达式为假结束循环,完成了字符串拷贝
最后返回被拷贝的字符串起始地址

3.strcmp字符串比较函数模拟实现

#define _CRT_SECURE_NO_WARNINGS
#include<assert.h>
#include<stdio.h>
int my_strcmp(const char* arr, const char* str)
{
	assert(arr != NULL && str != NULL);   //避免两个指针为空指针
	while (*arr != '\0' && *arr==*str) //当满足 arr指向的空间里的字符不是'\0'同时 arr指向的字符等于str指向的字符时进入循环
	{
		arr++;    //两个指针同时指向后一个字符
		str++;
	}
	if (*arr == *str)   //当while循环结束此时就得出了两个字符串最后的结果 要么相等,要么arr>str 要么arr<str用多分支判断大于返回1小于-1等于返回0
	{
		return 0;
	}
	else if (*arr > *str)
	{
		return 1;
	}
	else
	{
		return -1;
	}
	
}
int main()
{
	char arr[] = "abcde";
	char str[] = "abcde";
	int num = my_strcmp(arr, str);
	if (num == 0)
	{
		printf("arr==str相等\n");
	}
	else if (num > 0)
	{
		printf("arr>str\n");
	}
	else
	{
		printf("arr<str\n");
	}
	return 0;
}

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

4.strcat字符串追加函数模拟实现

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

先找到 arr数组字符串\0位置 再将str字符串从\0位置开始覆盖 最后arr数组里为两个字符串合并后的新字符串,完成字符串追加

5.strstr库函数模拟实现

#include<stdio.h>
#include<assert.h>
char* my_strstr(const char* arr, const char* str)   // 用const 修饰表示 指针指向的字符不能被修改
{
	assert(arr != NULL && str != NULL);   //断言防止 arr  和str为NULL
	
	char *arr1 = arr;                  //用arr1 str1指针进行移动 使指向的字符进行比较 arr和str记录起始比较位置
	char* str1 = str;                 //记录开始比较的字符位置
	if (*str1 == '\0')         //当str1即起始字符指针指向的字符为\0表示str是空字符串 空集也是arr的子集此时返回arr起始地址
	{
		return arr;
	}
	while (1)   
	{
		while (*arr1 != *str1)  // 使arr1指针指向的字符和str1指针指向的字符相等 
		{
			arr1++;
		}
		arr = arr1;    //arr记录开始比较的起始地址
		while (*arr1 == *str1 && *str1 != '\0')   //  当arr1和str1指向的空间不等 或者 str1指向了\0结束循环
		{
			arr1++;
			str1++;
		}
		if (*str1 == '\0')                 //多分支先判断 str1指向的空间是否为\0 如果是则说明str1前面的所有字符都和arr1里的字符比较了且相等 此时返回arr
		{
			return arr;
		}
		else if (*arr == '\0')         //上分支不成立 看这个分支 当arr1指向的是\0说明 str1还有字符没比完,此时不用继续比较了,arr1字符串里已经不存在str1字符串了
		{
			return NULL;
		}
		else                      //如果是两者不相等 则利用arr  和str 还原开始比较前的位置  arr1从arr+1处继续开始比较
		{
			arr1 = arr + 1;
			str1 = str;
		}
	}
	
}


int main()
{
	char arr[] = "abcabc";
	char str[] = "bc";
	char* ret = my_strstr(arr, str);
	if (ret == NULL)
	{
		printf("str不是arr的子集\n");
	}
	else
	{
		printf("str是arr的子集:%s", ret);
	}
	return 0;
}

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

二.总结

本篇博客中介绍了五种常用的字符串库函数,并对各字符串库函数进行了模拟实现,这几个库函数都是比较常见的,熟悉掌握后在后续使用它们解决遇到的字符串相关的问题能够事半功倍…

详细介绍五种常用字符串库函数 以及对库函数的模拟实现,c语言(从0到1学习),#     C语言进阶(从入门到精通),c语言,c++,开发语言,数据结构,算法

写文不易,给个一键三连支持下吧~文章来源地址https://www.toymoban.com/news/detail-611577.html

到了这里,关于详细介绍五种常用字符串库函数 以及对库函数的模拟实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python字符串的常用函数

    Python中用于操作字符串的函数有很多,以下是一些常用的函数及其用法: 1. len():返回字符串的长度    ```    s = \\\"hello, world!\\\"    print(len(s)) # 13    ``` 2. str():将对象转换为字符串类型    ```    n = 123    s = str(n)    print(s) # \\\"123\\\"    ``` 3. upper():将字符串中所有字母都转换

    2024年02月10日
    浏览(36)
  • 字符串函数介绍&应用

    C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量适合于那些对他不做修改的函数。 2.1 strlen函数 函数要求: 字符串中将’\\0’ 作为结束标志, strlen函数返回的是在字符串中’\\0’ 前

    2024年02月15日
    浏览(26)
  • PostgreSQL常用字符串分割函数整理

    SPLIT_PART() 函数通过指定分隔符分割字符串,并返回第N个子串。语法: SPLIT_PART(string, delimiter, position) string : 待分割的字符串 delimiter:指定分割字符串 position:返回第几个字串,从1开始,该参数必须是正数。如果参数值大于分割后字符串的数量,函数返回空串。 示例:SELEC

    2024年02月08日
    浏览(25)
  • C语言——字符串及字符函数的介绍

    1.1strlen的使用 运行结果: 1.2strlen的三种模拟实现 1.2.1计数器实现strlen函数 1.2.2递归方法实现strlen函数 1.2.3指针方法实现strlen函数 1.3 注意事项 ①、字符串已经 ‘\\0’ 作为结束标志, strlen函数返回的是在字符串中 ‘\\0’ 前面出现的字符个数(不包含 ‘\\0’ )。 ②、参数指向

    2024年02月02日
    浏览(25)
  • redis 字符串类型常用场景以及相关示例

    可以先看一下系列第一篇文章 字符串可以用作缓存键值对的存储方式。通过将经常使用的数据存储为字符串,可以提高读取速度,并减少数据库等后端系统的负载 数据库查询结果的缓存 场景 频繁读取相同数据 当某个数据被频繁地读取,而且这些读取操作对应的数据库查询

    2024年02月16日
    浏览(27)
  • 【C】字符串函数和内存函数的介绍

    strlen size_t strlen ( const char * str ); 字符串已经 ‘\\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\\0’ 前面出现的字符个数(不包含 ‘\\0’ )。 参数指向的字符串必须要以 ‘\\0’ 结束。 注意函数的返回值为size_t,是无符号的( 易错 ) 代码演示: 运行结果: strcpy char* s

    2024年02月16日
    浏览(30)
  • 【C语言】字符函数和字符串函数(一)—>库函数的介绍与模拟实现

    目录 前言: 一、函数介绍: (一)求字符串长度 (1)strlen (二)长度不受限制的字符串函数 (2)strcpy (3)strcat (4)strcmp (三)长度受限制的字符串函数 (5)strncpy (6)strncat (7)strncmp (四)字符串查找 (8)strstr (9)strtok (五)错误信息报告 (10)strerror (六)

    2024年02月15日
    浏览(35)
  • 编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。

    题目: 编写一个函数 ,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数, 在主函数中输入字符串以及输出上述的结果。 根据题目要求,来编写程序。 首先,确定主函数部分。其中d=digit数字、s=space空格、l=letter字母、o=other其他字符。 注意:因

    2024年02月04日
    浏览(54)
  • Python中常用的字符串分割方法介绍!

    在Python开发中,当需要将一个字符串进行拆分或者组合时,自带了一系列函数和方法来处理,今天老男孩教育小编带大家详细了解一下如何进行Python分割和拼接字符串,以下是详细的内容: 1、使用split()方法进行字符串切割 split()方法可以根据指定的分隔符将字符串切割成多

    2024年02月04日
    浏览(34)
  • C详细的字符串函数

    但行前路,莫问归期 要注意的是,要使用下边所讲的函数要包含头文件string.h strlen 求字符串的长度 函数参数:字符串指针 函数功能:传入字符串指针,字符串是以\\0为结束标志, 返回的类型size_t其实就是unsigned int ,函数返回的是字符串中**‘\\0’前边字符的个数**,传入字

    2024年02月05日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包