首页 > 其他分享 >【C】第5天 认识一揽子字符串函数

【C】第5天 认识一揽子字符串函数

时间:2024-08-23 19:51:54浏览次数:9  
标签:字符 一揽子 函数 dst char str 字符串 const

字符串函数 String Function

C语言自带的头文件string.h中包含了一些常用字符串函数原型,合理利用它们将有助于弥补C在字符串处理方面的不足。

STR-FUNC-1 检查字符串长度的strlen()

库函数strlen()的函数原型:

size_t strlen(char const *string)

它接受一个指向字符串起始位置的指针,再返回其长度。
注意到此处strlen()的返回值类型是size_t,这不是C的基本数据类型,它在头文件stddef.h中被定义。只需要将其看作是无符号整数unsigned int进行使用即可。


STR-FUNC-2 复制与连接

对于在多个字符串上进行操作,我们常常需要复制一个字符串到另一处:使用strcpy()。(函数名是 string copy 的简写)

char *strcpy(char *dst,const char *src);//它的返回值是dst的一个副本

src是指向源字符串的指针,该函数进行复制并包含结尾的\0。因此dst位置的内容将会被覆盖或不再可以访问。

strcpy的一大缺陷是它无法得知源字符串能否被放入dst中。如果dst中的可用空间太少,其结果是未定义的,所以一定要保证dst位置由足够存放的空间。

如果实在无法确定src的长度,可以使用更加安全的strncpy(),它额外接受一个无符号整数用于限制其最大复制长度。

char *strncpy(char *dst,const char *src,size_t len);

size_t len规定了最大复制字符的数量,包括其中的\0。如果src处的字符串中字符个数少于这个值,剩余的空位将会以\0自动填充。注意:如果src处的字符串中字符个数多于这个值,只有一部分会被复制,而更糟的是极可能得到一个不含结尾\0的字符串。

如前所述,复制字符串将覆盖原有的内容。除此之外我们还能用strcat()来连接一个字符串到另一个的结尾。

char *strcat(char *dst,const char *src);//它的返回值是dst的一个副本

strcat()将会先找到dst处字符串的末尾\0,再进行一次复制src的操作。

长度受限的版本:

char *strncat(char *dst,const char *src,size_t len);

STR-FUNC-3 字符串比较

字符串是由char组成的。那么应该如何比较两个字符串的“大小”?
下面请看strcmp()的原型:

int strcmp(char const *s1,char const *s2);

s1s2是两个将进行比较的字符串,strcmp()函数会查找它们其中第一个不一样的字符,然后根据字符的字符集序数进行比较,并且只会比较这一个字符就输出结果。如果前者s1小于后者s2,则返回一个小于0的值;前者大于后者,则返回一个大于0的值;相等时返回0。

实际上,这个函数最经常见到的用处是判断两个字符串是否相等。


STR-FUNC-4 在字符串中查找

strchr()strrchr()查找一个匹配的字符

char *strchr(char const *str,int ch);
char *strrchr(char const *str,int ch);

ch即为需要在str中查找的目标字符。有趣的是chint型,但只需要向它传递一个字符即可。
返回值是一个指向第一个匹配目标字符的指针。如果未找到则返回NULL

strrchr()函数原型相同,但它的返回值是指向字符串中最后一个出现的匹配目标字符的指针。


strpbrk()则是在一个字符集合中查找目标字符

char *strpbrk(char const *str,char const *group);

返回值是指向第一个在集合中出现的字符指针。如果未找到,返回值是NULL


strstr()在一个字符串中查找另一个字符串(又叫子串)

char *strstr(char const *str,char const *s);

这个函数将在str中查找s第一次完整出现的位置,并返回指向第一次出现的起始位置的指针。如果s未完整出现则返回NULL,如果s是空字符串则返回str本身。


**strspnstrcspn会对字符串前面的一部分进行计数。**依托于一个字符集合,从字符串开头处计数匹配目标字符集合的字符,直到遇到第一个不匹配的字符为止,返回起始部分的对应字符数量。

size_t strspn(char const *str,char const *group);
size_t strcspn(char const *str,char const *group);

strspn()返回str起始部分匹配group中任意字符的字符数量。
恰恰相反,strcspn()返回的是起始部分不匹配group的部分。遇到相匹配的字符时,会停止计数。


strtok()函数的用法比较抽象,它的作用是“分割”一个字符串。
在哪里进行分割?sep参数会给出用作分隔符的字符集合。

char *strtok(char *str,char const *sep);

函数从str开始查找sep中包含的分隔符,直到在str字符串中遇到sep中任意一个分隔符,将其修改(会修改str,这也是为何此处str形参并没有作为const量)为一个\0,然后返回一个指向已经分割好的子字符串的指针。

**与此同时strtok()函数会立即存储此字符串中改变了的位置。**在此之后,如果想要继续对str的后续部分进行分割,只需要向此函数的第一个形参传递一个NULL即可继续在str后面进行分割。

str中所有内容都已经被分割了,函数的返回值将变为NULL,以表示它已经无事可做。例如:

token = strtok(str, delimiters);  //先获取一个子字符串,并使strtok保存分割了的位置
  
    // 继续获取其他子字符串  
    while( token != NULL ) {  
        printf( " %s\n", token );  
  
        // 注意:这里需要传递 NULL 来获取下一个子字符串  
        token = strtok(NULL, delimiters);  
    }  


一揽子名字奇奇怪怪的这些函数我也记不住啊,明天争取再写一个函数应用篇吧

本系列博客为我本人原创的学习笔记,尽量勤更新,如有错误欢迎各位大佬指出,Thanks♪(・ω・)ノ

标签:字符,一揽子,函数,dst,char,str,字符串,const
From: https://blog.csdn.net/u011046264/article/details/141473472

相关文章

  • I2C软件模拟与Delay寄存器延迟函数
    环境芯片:STM32F103ZET6库:来自HAL的STM32F1XX.H原理图有图可知SCL和SDA两条线接到了PB10和PB11Driver_I2C.h#ifndef__DRIVER_I2C#define__DRIVER_I2C#include"stm32f1xx.h"#include"Com_Delay.h"//定义拉高SCL引脚的宏操作#defineSCL_HIGH(GPIOB->ODR|......
  • C++ 使用 using 声明语句放开基类的重载函数
    #include<functional>#include<string>#include<iostream>#include<vector>#include<memory>#include<set>#include<map>usingnamespacestd;namespace{classAnimal{public:stringGe......
  • 箭头函数的基本语法
    箭头函数基本语法//constfun=()=>{//console.log(1,2,3);//}//fun()//有多个参数的时候括号一定不能省略letfun1=(a,b)=>{console.log(a,b);}fun1('我是实参')/......
  • 【python1-3】input()函数
    一般配合变量使用,把input()放进去a=input()print(a)可以增加输入提示a=input('请输入你的名字:')print(a)任务2要类型一样才能加减,把字符串变成整型age=input('请输入你的年龄:')age=int(age)year=2024birth=year-ageprint('出生日期是',birth)......
  • 通过 MATLAB 的 cylinder 函数生成圆柱体的表面坐标,生成表示一个具有非标准形状的圆柱
    MATLAB的机器人系统工具箱(RST)的官方例程PlanaReachingTrajectorywithMultipleKinematicConstraints规划具有多个运动学约束的到达轨迹%创建用于视觉化杯子的点[X,Y,Z]=cylinder(cupRadius*linspace(0,1,50).^0.125);%调整Z坐标的比例,使其符合杯子的高度Z......
  • 5章2节:离散趋势的描述,文末1个简单函数同时搞定20个结果
    在统计学中,描述一组数据时,通常使用集中趋势指标(如平均数)来反映数据的集中程度。然而,单独使用集中趋势并不能完全描述数据的特征,因此还需要引入离散趋势的指标,以揭示数据的变异程度或离散程度。这些离散趋势的指标被称为离散指标或变异指标。离散指标通过衡量数据点相对于中心......
  • 【Python进阶】Python中的函数式编程元素:map、filter和reduce的妙用
    1、函数式编程概览1.1函数式编程起源与发展函数式编程这一概念可以追溯到20世纪30年代的λ演算理论,这一时期数学家们开始探讨如何通过纯粹的函数运算来构建计算模型。随着时间的推移,函数式编程逐渐发展成为一种重要的编程范式,并在Lisp、Scheme、Haskell等语言中得到了充......
  • PHP8面向对象快速入门二 构造函数 析构函数 静态变量 静态方法
    在PHP中,构造函数是一个特殊的方法,用于在创建对象时初始化对象的状态。构造函数在对象实例化时自动调用,以设置初始值或执行必要的准备工作。它可以接受参数,用于初始化对象的属性。构造函数的特点自动调用:构造函数在创建对象时自动调用。你不需要显式调用构造函数,它会在实例......
  • 【软件逆向】第11课,软件逆向安全工程师之windows API函数,每天5分钟学习逆向吧!
    资料获取关注作者,备注课程编号,获取本课配套课件和工具程序。干货开始-windowsAPI函数。微软官方提供的应用程序接口,是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件提供的能力。地址:https://learn.microsoft.com/zh-cn/windows/win32/dlgbox/dialo......
  • 函数栈帧的创建与销毁
    目录1.什么是函数栈帧2.了解函数栈帧的好处3.函数栈帧的创建与销毁3.1什么是栈3.2认识相关寄存器和汇编指令3.3解析函数栈帧的创建与销毁3.3.1预备知识3.3.2函数的调用堆栈3.3.3准备环境3.3.4 转到反汇编1.什么是函数栈帧我们在写C语言代码的时候,经常会把一......