首页 > 其他分享 >字符函数和字符串函数

字符函数和字符串函数

时间:2024-11-14 17:18:38浏览次数:3  
标签:字符 函数 strtok 参数 字符串 返回值

1. 字符分类函数

2. 字符转换函数

3. strlen的使⽤和模拟实现

4. strcpy的使⽤和模拟实现

5. strcat的使⽤和模拟实现

6. strcmp的使⽤和模拟实现

7. strncpy函数的使⽤

8. strncat函数的使⽤

9. strncmp函数的使⽤

10. strstr的使⽤和模拟实现

11. strtok函数的使⽤

12. strerror函数的使⽤

今天的字符串函数有点小多哦,那么接下来,正文开始

1. 字符分类函数

C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。 这些函数的使⽤都需要包含⼀个头⽂件是 ctype.h

在这里我们主要说islower函数 ,这个函数表示的就如同他的名字一样,如果给他传进去的参数是小写字母,那么它的返回值就是1,如果传进去的值不是小写字母,是一个大写字母或者是其他值,那么说明参数不符合这个函数的参数,那么返回值就是0;

当然,要使用这个库函数就必须包含他的头文件。

我们来看一个例题,你猜他的结果是什么?  是小于吗,那恭喜你,错了。。

我们一起来看,他在图中,给出的是strlen函数,但是我们要知道的是,strlen函数的返回值是size_t类型的,意思是什么,意思就是这两个函数的返回值都是无符号的整型,无符号的整型减去无符号的整形,得到的结果也是无符号的整型

3-6的结果是-3,但是在无符号的整型中,它会被判断成一个极大的正这整数

3. strlen的使⽤和模拟实现

strlen函数作用于字符串

这是就是strlen函数,他的参数是一个指针,他的返回值是size_t无符号的整型。

用于测量字符串的长度,我们已经看到了这个函数,他的参数是一个指针,所以我们在使用这个函数的时候,只能给他传进去地址.

我们来看这个函数的实现

上图采用了递归的方法,没有创建新的变量。

4. strcpy函数的使用和模拟实现

我们来一起看看这个函数,这个函数和内存函数memcpy比较相似,但是参数和返回值略有不同,strncpy函数他的返回值是char*类型的,但是内存函数可不管你是什么类型的数据,它的返回值是void* 类型的,但是他们的返回值返回的都是复制完后目标函数的首地址。这是为了方便链式调用。

这个函数比较牛逼的就是,他会把源字符串中的\0也给他拷贝过去,这样使得目标字符串变成了一个完整的字符串,这个带有\0的字符串,保证在调用的时候不会出错。

上图就是函数的使用,把要拷贝的目的字符串放到首位,源字符串放到末尾,返回值是目标字符串的首地址。

接下来我们来尝试下,strcpy字符串函数的实现:

这就是函数的实现

5. strcat 的使⽤和模拟实现

stract函数的是一个追加函数,它的作用就是把原字符串追加到目标字符串里面:

  • 具体的操作过程是:strcat函数首先会找到目标字符串dest中的\0字符(这是 C 语言中字符串结束的标志)。然后从这个\0字符的位置开始,将源字符串src中的字符逐个复制到目标字符串dest中,直到遇到源字符串src中的\0字符为止。最后,在目标字符串dest的新的末尾位置添加一个\0字符来标记新的字符串结束位置。

这就是strcat函数的实现,

但是这个函数不能自己追加自己,不然他就会死循环。

6. strcmp的使⽤和模拟实现

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

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

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

那么如何比较两个字符串的大小,比较的是字符串中ASCII码值的大小

这个函数和memcmp函数不一样,memcmp在进行比较的时候,她并不考虑比较的数据是什么,他只考虑比较的给定长度的字节序列

函数的实现

7. strncpy函数的使⽤

给它加上了限制,不会无节制的进行打印

其实也只是给他们加上了限制,限制了n个字节

10. strstr 的使⽤和模拟实现

我们先来看看这个函数的基本的形式,有两个参数,一个返回值,都是指针类型的

这个字符串函数的作用就是在str1里面查找str2,看他有没有出现过,如果他出现过,那么函数就返回他在str1里面第一次出现str2的位置,但是如果没有出现过,那就返回NULL空指针。

上图就是strstr函数的实现。

11. strtok函数的使⽤

这个函数有两个参数,一个是用来存放字符串,另一个是用来存放分隔符的。

sep参数指向⼀个字符串,定义了⽤作分隔符的字符集合,这个字符串里面全都是分隔符。

第⼀个参数指定⼀个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标 记。

strtok函数找到str中的下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记的指针。(注: strtok函数会改变被操作的字符串,所以被strtok函数切分的字符串⼀般都是临时拷⻉的内容并且 可修改。)所以我们在使用这个函数的时候,需要先对他进行一份拷贝,然后在进行。

strtok函数的第⼀个参数不为NULL,函数将找到str中第⼀个标记,strtok函数将保存它在字符串中的位置。

strtok函数的第⼀个参数为NULL,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标 记。

对于后续的调用(在第一次调用之后),需要将str参数设置为NULLstrtok会记住它在原始字符串中的位置,继续从上次结束的位置开始查找下一个标记,直到找不到更多的标记(返回NULL

在上图中,我们就看到了他在开始的时候就先对原始的字符串进行了拷贝,防止以后会使用到原始的字符串。然后就是对他进行了一个for循环的连续调用,第一次调用的时候strtok函数的参数是字符串,等待到第二次以后的话,他的参数就变成了NULL的空指针。

标签:字符,函数,strtok,参数,字符串,返回值
From: https://blog.csdn.net/daiwoliyunshang/article/details/143744875

相关文章

  • Flask新手教程之- 视图函数的装饰器
    除了@app.route,Flask还支持其他装饰器,用于实现更复杂的功能。 示例:@app.before_request:在每个请求处理之前运行的函数。@app.after_request:在每个请求处理之后运行的函数。@app.teardown_request:在请求结束后运行的函数,用于清理工作。  实例:@app.before_requestd......
  • C++中的仿函数Functor
    在C++中,有仿函数Functor的概念,首先要明白,它叫做仿函数,就说明它本身肯定不是一个函数=>事实上,它是一个类的对象,但是可以像函数一样来进行调用怎么来理解这句话呢“仿函数是一个类的对象,但是它可以像函数一样来进行调用”? 是这样的=>本质是在这个类里面实现一个operator(),......
  • C语言:函数递归
    #include<stdio.h>intmain(){ printf("haha\n"); main(); return0;}先来看这段代码,这是最简易的一段递归的代码。当我们打印完haha后会main函数调用自己,这样就会使屏幕一直打印haha,但是会停止,这是为什么呢?因为当我们为main函数在栈区开出的内存被不断使用,最后导致栈溢......
  • PyTorch 手写字符识别
    PyTorch手写字符识别我们使用MNIST数据集对建立的卷积神经网络进行了训练,并加载测试集进行测试,最终的识别精度达到了99%。但是官方和网上的测试流程只是演示最终的测试结果,没有很直观的告诉我们怎么在项目中使用他。我们学习机器学习和人工智能的目的不是跑一个官网的演示程......
  • 【Pytorch】神经网络介绍|激活函数|使用pytorch搭建方法
    神经网络神经网络介绍概念神经网络人工神经网络ANN也称神经网络NN是一种模仿生物神经网络结构和功能的计算模型人脑可以看作是一个生物神经网络,由众多神经元连接而成,神经网络可以看作是模拟生物神经元的过程输入层inputLayer:输入x的那一层输出层output......
  • 高级语言调用C接口(二)回调函数(1)
    前言先说一下上一篇文章给出了各高级语言类型和C类型的对应关系,只包含基本类型,不包含结构体等复杂结构,高级语言只有常见的JAVA(Android通用)、C#、Python、Arkts(鸿蒙系)。其它语言如delphi、PB之类的古老语言目前使用的人非常稀少,默认不写了;还有js调用需要编译位wasm,但限制非......
  • Day 14 匿名函数 内置函数 面向对象编程
    目录0上节课复习0.1迭代器0.1.1可迭代对象0.1.2迭代器对象0.1.3for循环原理0.2三元表达式0.3列表推导式0.4字典生成器0.5生成器0.5.1生成器表达式0.6递归0.7二分法1匿名函数1.1有名函数1.2匿名函数2内置函数2.1掌握2.2了解3面向过程编程0上节课复习0.1迭代......
  • 探索 Python 函数式编程的瑞士军刀:Toolz 库
    文章目录探索Python函数式编程的瑞士军刀:Toolz库第一部分:背景介绍第二部分:Toolz库概述第三部分:安装Toolz库第四部分:Toolz库函数使用方法1.高阶函数2.计算管道3.字典合并4.分组5.累积计算第五部分:Toolz库使用场景场景1:学生分数统计场景2:数据流处理场景3:......
  • R语言使用caret包构建岭回归模型实战,构建回归模型、通过method参数指定算法名称、通过
    R语言使用caret包构建岭回归模型实战,构建回归模型、通过method参数指定算法名称、通过trainControl函数控制训练过程目录R语言使用caret包构建岭回归模型(RidgeRegression )构建回归模型、通过method参数指定算法名称、通过trainControl函数控制训练过程 #导入包和库#仿......
  • R语言data.table导入数据实战:data.table使用自定义函数及Reduce函数实现一次性性多表
    R语言data.table导入数据实战:data.table使用自定义函数及Reduce函数实现一次性性多表连接、data.table使用自定义函数及Reduce函数实现一次性性多表连接目录R语言data.table导入数据实战:data.table使用自定义函数及Reduce函数实现一次性性多表连接#data.table是什么?#dat......