第20课【字符串变量处理】字符串输入输出 拷贝 拼接 比较 查找

基本知识框架

在这里插入图片描述

课堂笔记

在C语言中,对字符和字符串的处理相当频繁,C语言拥有专门的库函数用于处理字符串,但并没有专门的字符串类型数据用于存储字符串,通常我们使用常量字符串和字符数组来存储字符串。

常量字符串数组只可以读取,不可以修改,而字符数组既可以读取,也可以修改

相应的用于处理字符串的函数主要有以下几类:

字符串处理函数

strlen
size_t strlen(const char *str)

功能:计算字符串长度
返回值:字符串长度
注意:

  • 计算长度时,不包含末尾的 ‘\0’
  • 注意返回的是无符号的整数
strcpy
char *strcpy(char *dest, const char *src)

功能:字符串拷贝,将源字符串str拷贝到目标字符串dest中
返回值:目标字符串dest的地址
注意:

  • 目标字符串必须可修改
  • 源字符串必须以’\0’结尾,会复制源字符串结尾的 ‘\0’
  • 如果目标字符串容量不够大,容易出现缓冲溢出的情况
strncpy
char *strncpy(char *dest, const char *src, size_t n)

功能:字符串拷贝,拷贝源字符串str的前n个字符到目标字符串dest中
返回值:目标字符串dest的地址
注意:

  • 目标字符串必须可修改
  • 不会复制源字符串结尾的 ‘\0’
  • 如果目标字符串容量不够大,容易出现缓冲溢出的情况
  • 源字符串和目标字符串占用的空间不能重叠
  • 当n>strlen(src)时,在末尾补上’\0’进行填充
strcat
char* strcat(char* dest,const char* src)

功能:字符串拼接,拷贝源字符串str到目标字符串dest尾部
返回值:目标字符串的地址
注意:

  • 目标字符串必须可修改
  • 源字符串必须以’\0’结尾,会将目标字符串末尾的’\0’覆盖掉
  • 会在拼接后的字符串尾部新增’\0’
  • 源字符串和目标字符串占用的空间不能重叠
strncat
char* strncat (char* dest,const char* src,size_t num)

功能:字符串拼接,拷贝源字符串str的前n个字符到目标字符串dest尾部
返回值:目标字符串的地址
注意:

  • 目标字符串必须可修改
  • 源字符串必须以’\0’结尾,会将目标字符串末尾的’\0’覆盖掉
  • 会在拼接后的字符串尾部新增’\0’
  • 源字符串和目标字符串占用的空间不能重叠
  • 当n>strlen(src)时,不会补齐’\0’,仅将源字符串str全部拼接至目标字符串尾部
strcmp
int strcmp (const char* str1,const char* str2)

功能:字符串比较,比较字符串str1和字符串str2
返回值:比较结果
注意:

  • 字符串比较的规则是比较当前字符的ASCII码值
  • 比较结束的标志是已经得出比较结果(其中一个字符比较大或小)或者其中一串字符已经比较结束
  • 当两个字符相等时会返回0
  • 大小写敏感,如果要忽略大小写,可以使用stricmp
strncmp
int strncmp(const char *str1, const char *str2, size_t n)

功能:字符串比较,比较字符串str1和字符串str2的前n个字符
返回值:比较结果
注意:

  • 基本同strcmp

字符串查找函数

strchr
char* strchr(const char* str,char c)

功能:查找字符串中的字符,查找字符串str中是否有字符c
返回值:字符串str中如果存在字符c,返回字符串str中第一次出现字符c的地址。如果字符串str中不存在字符c,返回NULL

strrchr
char* strchr(const char* str,char c)

功能:查找字符串中的字符,查找字符串str中是否有字符c
返回值:字符串str中如果存在字符c,返回字符串str中最后一次出现字符c的地址。如果字符串str中不存在字符c,返回NULL

strstr
char* strstr(const char* str,const char* substr) 

功能:查找字符串中的子字符串,查找字符串str中是否有子字符串substr
返回值:字符串str中如果存在子字符串substr,返回字符串str中第一次出现子字符串substr的地址。如果字符串str中不存在子字符串substr,返回NULL

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

功能:根据分隔符分割字符串,根据分隔符sep将字符串str分割成若干段
返回值:分割后的后半段字符串的首地址,后半段已再无字符串则返回NULL
注意:

  • sep参数是一个字符串,意味着分隔符可以有多个
  • strtok会修改原字符串,当strtok匹配到字符串str中有相应的分隔符sep时,会将字符串str中的匹配字符改为’\0’
  • 第一次调用strtok时,必须传入参数str,第二次调用时无需传入参数str,直接传入NULL,函数中会自动使用static函数保存分割后的后半段字符串的首地址
  • 分隔符sep只作为输入参数,不会输出显示
strspn
size_t  strspn(const char* str1, const char* str2)

功能:返回两个字符串之间存在连续相同字符的数量,从首到尾计算字符串str1与字符串str2中连续相同字符的个数
返回值:连续相同字符的个数,无符号数
注意:

  • 当字符串str1的字符全部都出现在字符串str2 中时,返回字符串str1的长度
  • 当字符串str1的第一个字符就和字符串str2的不匹配时,直接返回0
strcspn
size_t  strcspn(const char* str1, const char* str2)

功能:返回两个字符串之间存在连续不同字符的数量,从首到尾计算字符串str1与字符串str2中连续不同字符的个数
返回值:连续不同字符的个数,无符号数
注意:

  • 当字符串str1的字符全部都没有出现在字符串str2 中时,返回字符串str1的长度
  • 当字符串str1的第一个字符就和字符串str2的匹配时,直接返回0

内存操作函数

malloc
void *malloc(size_t size);

功能:在内存中申请指定size大小的空间
返回值:如果申请成功则返回该内存空间的首地址,如果申请失败,返回NULL
注意:

  • malloc申请出来的内存空间,不会被初始化
  • malloc申请出来的内存空间,大小以字节计算
calloc
void *calloc(size_t num,size_t size);

功能:在内存中申请连续num块指定size大小的空间
返回值:如果申请成功则返回内存空间的首地址,如果申请失败,返回NULL
注意:

  • calloc申请出来的内存空间,会被初始化成0
  • calloc申请出来的内存空间,大小以字节计算
realloc
void *realloc(void *ptr, size_t size)

功能:重新分配之前已经申请的内存空间
返回:如果分配成功则返回重新分配内存空间的首地址,如果分配失败,返回NULL
注意:

  • 传入的参数包括要重新分配空间内存块的首地址ptr,以及要重新分配大小size
free
void free(void *ptr)

功能:释放已被分配内存空间
返回:无返回值
注意:

  • 指针ptr指向要释放的内存空间
  • 当指针ptr的值为NULL时,不会有任何效果
  • 当分配的内存块较大时,并且不再使用时,要使用free函数去释放内存空间
memcpy
void *memcpy(void *dest,void *src,unsigned int count);

功能:拷贝内存空间,将源地址src指向空间拷贝count个字节的内容到目标地址dest指向的空间
返回值:返回拷贝完成后目标地址的指针dest
注意:

  • 内存拷贝的字节数由count决定
  • 当count>sizeof(src)时,会在末尾补上’\0’
  • 源地址与目标地址指向的空间不能重叠
memmove
void *memmove(void *dest,void *src,unsigned int count);

功能:移动(拷贝)内存空间
返回值:同memcpy
注意:

  • 和memcpy一样的功能,同样是拷贝内存空间
  • memmove可以处理地址指向空间重叠的问题,注意源地址src只想的空间可能会被改变
memset
void *memset(void *buffer,int c,int count);

功能:初始化内存空间,将buffer指向的内存空间中的前count 个字节的内容初始化为整形数据c
返回值:初始化后的内存空间
注意:

  • 一般用于给数组、字符串等类型赋值
memcmp
int memcmp(void *buf1,void *buf2,unsigned int count);

功能:比较buffer1和buffer2指向内存空间的前count个字节
返回值:比较结果,有符号整型数
注意:

  • 功能上其实与strncmp差不多,都是根据ASCII码进行比较
memchr
void *memchr(const void *str, int c, size_t n)

功能:查找str指向的内存空间中前n个字节,是否出现字符c
返回值:如果查找成功,返回str中出现字符c的地址。如果查找失败,返回NULL
注意:

  • 传入的字符是以int的形式传入的,查找是都是将这个值看作无符号字符

其他字符相关函数

islower:
int islower(int c)

功能:判断字符是否为小写(a~z)
返回值:如果是小写,返回一个非零值表示True,否则返回0,表示False

isupper
int isupper(int c)

功能:判断字符是否为大写(A~Z)
返回值:如果是大写,返回一个非零值表示True,否则返回0,表示False

isalpha
int isalpha(int c)

功能:判断字符是否为字母(a~z, A~Z)
返回值:如果是字母,返回一个非零值表示True,否则返回0,表示False

isalnum
int isalnum(int c)

功能::判断字符是否为数字或字母;(0~9,a~z,A~Z)
返回值:如果是数字或字母,返回一个非零值表示True,否则返回0,表示False

tolower
int tolower(int c)

功能::转化字符为小写字母

toupper
int toupper(int c)

功能:转化字符为大写字母

atoi
int atoi(const char *str)

功能:将ASCII码转换为数字

基本知识框架Xmind文件下载

链接: 资源下载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值