C语言:字符函数和字符串函数

这次小编带来的是字符函数和字符串函数的有关讲解,若有不当之处,欢迎指正.

1、字符分类函数

专门做字符分类(字符是属于什么类型),这些函数的使用需要包含头文件 ctype.h

|----------|---------------------------------------------------------|
| 函数 | 若他的参数符合下列条件就返回真 |
| iscntrl | 任何控制字符 |
| isspace | 空白字符:空格'' ,换页'\f',换行'\n',回车'\r',制表符'\t'或者垂直制表符'\v' |
| indight | 十进制数字'0'~'9'字符 |
| isxdight | 十六进制数字,包括所有十进制数字字符,小写字母a~f,大写字母A~F |
| islower | 小写字母a~z |
| isupper | 大写字母A~Z |
| isalpha | 字母a~z或A~Z |
| isalnum | 字母或者数字,a~z,A~Z,0~9 |
| ispunct | 标点符号,任何不属于数字或者字母的图形字符(可打印) |
| isgraph | 任何图形字符 |
| isprint | 任何可打印字符,包括图形字符和空白字符 |

这里我们举个例子:

cpp 复制代码
int islower ( int c);

islower是能够判断参数部分的c是否是小写字母

2.字符转换函数

两个字符转换函数

cpp 复制代码
int tolower (int c);//将参数传进去的大写字母转换成小写
int toupper (int c);//将参数传进去的小写字母转换成大写

3.strlen

cpp 复制代码
size_t strlen (const char* str);

功能:统计参数 str 指向的字符串长度,统计的是字符串中'\0'之前的字符个数

参数:

str:指针,指向了要统计长度的字符串

返回值: 返回了str指向的字符串的长度,返回的长度不会是负数,所以返回类型是 size_t

使用注意事项:

1.字符串以'\0'作为结束标志,strlen函数返回的是字符串中'\0'前面出现的字符个数(不包含'\0')

2.参数指向的字符串必须要以'\0'结束

3.注意函数的返回值为size_t,是无符号的(易错)

4.strlen 的使用需要头文件<string.h>

4.strcpy

cpp 复制代码
char* strcpy(char* destination,const char* source);

功能:字符串拷贝,拷贝到源头字符串中的\0为止

参数:

destination:指针,指向目的空间

source:指针,指向源头函数

返回值:strcpy函数返回的目标空间的起始地址

使用注意事项:

1.源字符串必须以'\0'结束

2.会将源字符串中的'\0'拷贝到目标空间

3.目标空间必须足够大,以确保能存放源字符串

4.目标空间必须可修改

5.strcat

cpp 复制代码
char* strcat (char* destination, const char* source);

功能:字符串追加,把source指向的源字符串中的所有字符串都追加到destination指向空间中

参数:

destinatio:指针,指向目的地空间

source:指针,指向源头数据

返回值:

strcat函数返回的目标空间的起始地址

使用注意事项:

1.源字符串必须以'\0'结束;

2.目标字符串中也得有\0,否则没办法知道追加从哪里开始;

3.目标空间必须足够的大,能容纳下源字符串的内容;

4.目标空间必须可修改

6.strcmp

cpp 复制代码
int strcmp(const char* str1, const char* str2);

功能:用来比较str1和str2指向的字符串,从两个字符串的第一个字符开始比较,如果两个字符的ASC||码值相等,就比较下一个字符,直到遇到不相等的两个字符,或者字符串结束

参数:

str1:指针,指向要比较第一个的字符串;

str2:指针,指向要比较第二个的字符串

返回值:标准规定:

1.第一个字符串大于第二个字符串,则返回大于0的数字

2.第一个字符串等于第二个字符串,则返回0;

3.第一个字符串小于

7.strncpy

cpp 复制代码
char * strncpy ( char * destination, const char * source, size_t num );

功能:字符串拷贝;将source指向的字符串拷贝到destination指向的空间中,最多拷贝num个字符

参数:

destination:指针,指向目的地空间

source:指针,指向源头数据

num:从source指向的字符串中最多拷贝的字符个数

返回值:

strncpy函数返回的目标空间的起始地址

比较strcpy和strncpy函数

strcpy函数拷贝到\0为止,如果目标空间不够的话,容易出现越界的情况

strncpy函数指定了拷贝的长度,源字符串不一定要有\0,同时在设计参数的时候,就会多一层思考:目标空间是否够用,strncpy相对于strcpy函数更加安全

8.strncat

cpp 复制代码
char * strncat ( char * destination, const char * source, size_t num );

功能:字符串追加,将source指向的字符串的内容,追加到destination指向的空间,最多追加num个字符

参数:

destination:指针,指向目标空间

source:指针,指向源头数据

num:最多追加的字符的个数

返回值:返回的是目标空间的起始地址

strcat和strncat对比

参数不同,strncat多了一个参数

strcat函数在追加的时候要将源字符串的所有内容,包含\0的都追加过去,但是strncat函数指定了追加的长度

strncat函数中源字符串中不一定要有\0了

strncat更加安全,也更加灵活

9.strncmp

cpp 复制代码
int strncmp ( const char * str1, const char * str2, size_t num );

功能:字符串比较,比较str1和str2指向的两个字符串的内容,最多比较num字符

参数:

str1:指针,指向第一个要比较的字符串

str2:指针,指向另外一个要比较的字符串

num:最多比较的字符个数

返回值:

标准规定:

1.第一个字符串大于第二个字符串,则返回大于0的数字

2.第一个字符串等于第二个字符串,则返回0;

3.第一个字符串小于第二个字符串,则返回小于0的数字

strcmp和strncmp比较

参数不同;

strncmp可以比较任意长度;

strncmp更加灵活,更加安全

10.strstr

复制代码
char * strstr ( const char * str1, const char * str2);

功能:strstr函数,查找str2指向的字符串在str1指向的字符串中第一次出现的位置(简而言之就是在第一个字符串中查找子字符串)

strstr的使用要包含头文件<string.h>

参数:

str1:指针,指向了被查找的字符串

str2:指针,指向了要查找的字符串

返回值:

如果str1指向的字符串中存在str2指向的字符串,那么返回第一次出现位置的指针;

如果str1指向的字符串中不存在str2指向的字符串,那么返回NULL

strstr函数可以暴力实现,也可以通过算法来实现(KMP)

11.strtok函数的使用

复制代码
char *strtok(char *str, const char *delim);

功能:

分割字符串:根据delim参数中指定的分隔符,将输入字符串str拆分成多个子字符串;

修改原始字符串:strtok会直接在原始字符串中插入'\0'终止符,替换分隔符的位置,因此原始字符串会被修改

参数:

str:首次调用时传入待分割的字符串;后续调用传入NULL,表示继续分割同一个字符串

delim:包含所有可能分隔符的字符串(每个字符均视为独立的分隔符)

返回值:

成功是返回指向当前子字符串的指针

没有更多字符串时返回NULL

使用步骤

首次调用:传入待分割字符串和分隔符

后续调用:传入NULL和相同的分隔符,继续分割

结束条件:当返回NULL时,表示分割完成

注意事项:

破坏性操作:strtok会直接修改原始字符串,将其中的分隔符替换为'\0'.如果需要保留原字符串,应先拷贝一份

连续分隔符:多个连续的分隔符会被视为单个分隔符,不会返回空字符串

空指针处理:如果输入的str为NULL且没有前序调用,行为未定义

12.strerror函数的使用

cpp 复制代码
char* strerror ( int errnum );

功能:strerror函数可以通过参数部分的errnum表示错误码,得到对应的错误信息,并且返回这个错误信息字符串首字符的地址;

strerror 函数只针对标准库中的函数发⽣错误后设置的错误码的转换;

strerror 的使⽤需要包含;

在不同的系统和C语⾔标准库的实现中都规定了⼀些错误码,⼀般是放在errno.h这个头文件中说明的,C语⾔程序启动的时候就会使用⼀个全局的变量 序启动的时候 errno.h 这个头⽂件中说 errno 来记录程序的当前错误码,只不过程 errno 是0,表示没有错误,当我们在使用标准库中的函数的时候发⽣了某种错误,就会将对应的错误码,存放在 errno 中,而⼀个错误码的数字是整数,很难理解是什么意思,所以每⼀个错误码都是有对应的错误信息的。strerror函数就可以将错误码对应的错误信息字符串的地址返回。

参数:

errnum:表示错误码

这个错误码一般传递的是errno这个变量的值,在C语言中有一个全局变量叫:error,当库函数的调用发生错误的时候,就会将本次错误的错误码放到errno这个变量中,使用这个全局变量需要包含一个头文件errno.h

返回值:函数返回通过错误码得到的错误信息字符串的首字符的地址

perror

功能:将上一个系统调用或库函数出错原因以人们可读的字符串形式打印出来

其必须包含头文件<stdio.h>

参数:接收一个int类型的error值

输出:打印自己自定义的提示信息,再自动追加冒号,空格和对应的错误描述

以上就是本次小编带来的字符函数和字符串函数有关的内容分享,若有不当之处,欢迎指正.

相关推荐
kyle~3 小时前
C++---向上取整
开发语言·c++
QX_hao3 小时前
【Go】--扩容机制
开发语言·golang
weixin_307779133 小时前
Clickhouse导出库的表、视图、用户和角色定义的SQL语句
开发语言·数据库·算法·clickhouse·自动化
流星白龙4 小时前
【Qt】7.信号和槽_connect函数用法(1)
开发语言·数据库·qt
小龙报4 小时前
《算法通关指南---C++编程篇(1)》
开发语言·c++·程序人生·算法·学习方法·visual studio
在繁华处4 小时前
C语言初步学习:数组的增删查改
c语言·数据结构·学习
月夜的风吹雨4 小时前
【数据结构】:C 语言常见排序算法的实现与特性解析
c语言·数据结构·排序算法
Cx330❀4 小时前
《C++ 手搓list容器底层》:从结构原理深度解析到功能实现(附源码版)
开发语言·数据结构·c++·经验分享·算法·list
CC.GG4 小时前
【C++】STL容器--list的使用
开发语言·c++·list