总结c语言中常见的字符函数和字符串函数

1.字符分类函数

(1)在c语言中存在一系列函数是专门用来做字符分类的,也就是一个字符是属于什么类型字符的。

(2)所有的这一类函数都需要引用同一个头文件<ctype.h>。

(3)以下就是这些函数的函数名及其作用:

(4)选取其中是islower举例:其形式为int islower( int c );其中的 int c 是字符或者字符的ASCII码值。

可以用这样的语句进行实现int ret=slower=('a'): printf("%d ",ret);实现函数结果的检验,容易发现如果括号里面的值符合,那么ret就为非零的数,其他的情况则ret则会变成0;

再用上面的函数举一个具体例子:(把一个字符串的小写字母全部变成大写)

同理以上其他所有函数都是这样的;

2.字符转换函数

(1)作用很简单就是对大写与小写字母进行呼唤,分为两个一个函数名叫做tolower,而另一个叫做toupper

(2)所需要包含的头文件依然是<ctype.h>;

(3)形式分别为:int tolower  (itn c);//将参数传进去的大写字母变成小写字母

                   int toupper (itn c);//将参数传进去的小写字母变成大写字母

(4)用以上知识可以对上一个图片中的例子进行改变:

3.长度不受限制的字符串函数

<1>.strlen函数

(1)函数的形式: size_t strlen( const char * str );

(2)字符串是以'\0'作为结束标志的,strlen函数返回值是在字符串中'\0'前面出现的字符个数(不包括'\0');

(3)注意参数指向的字符串必须要以'\0'来结束;

(4)头文件为<string.h>;

(5)返回值为size_t,是无符号的(易错);(无符号整型)

(6)使用递归的方法来模拟实现一下strlen函数的实现过程:

<2>.strcpy函数

(1)字符串拷贝函数,顾名思义作用就是拷贝字符串;

(2)函数原型: char * strcpy ( char * destination , char * source ) ;

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

作用是把source指向的字符串放在destination指向的空间中去,包含结束的 '\0' ;

(3)简单的举例一下:

  运行后可以成功看到arr2中变成了hello world;

(4)注意:源头的字符串必须出现'\0',不然strcpy不会结束;

(5)用简单的代码实现strcpy的功能:

也可以重新改写一下:

<3>.strcat函数

字符串连接函数

(1)原型:char * strcat ( char * destination , const char * source);该函数的返回值同样是目标空间的首地址。

(2)简单举例:

(3)要点:目标字符串必须要有'\0',连接的字符串也要有'\0',否则没法结束(或者说不知道什么时候结束),目标空间必须足够大,目标空间必须可以被修改;

(4)编程实现strcat函数的功能:

(5)能否用strcat函数使字符串本身连接在自己后面呢,答案是不能(实践出真知,是一个死循环);

<4>.strcmp函数

字符串比较函数

(1)原型为:int strcmp ( const char * str1, const char * str2 );(注意不是比较字符串的长度,而是比较对应字符的大小。)

(2)如果str1>str2,那么返回值为小于零的数,如果大于则返回相同的数,再者返回0;

(3)简单举例:

(4)简单代码实现strcmp函数的功能:

4.长度受限制的字符串函数

<1>strncpy

(1).函数原型为:char *strncpy( const char *destination, const char * source, size_t num );

其中num所值的意思是从source中最多拷贝的字符。

(2)简单举例子:

按照上图中代码当然也会有比如把3改成7之类的,这样arr1里面内容就不够了,这时候拷贝过程中多出来不够的就会自动用'\0'来表示。

<2>strncat

(1)函数原型为char * strcat ( char * destination , const char * source ,size_t num );其中num所值的意思是从source中最多连接的字符。

(2)简单举例一下:

(3)可以总结一下strncat的特点:

从'\0'后面开始追加特定的个数的字符,然后在追加完之后再自动加上一个'\0'让其变成字符串,

再者就是如果source的字符串长度小于num的时候只会追加一个'\0'(不会和strncpy一样追加更多的'\0')。

(4)不同于strcat而言,这个函数可以自己给自己追加。

<3>strncmp

(1)原型为:int strcmp ( const char * str1, const char * str2 , size_t num );(num的意思是指的最多比较的字符的数量。)

(2)简单举例一下:

当有一个字符串不够长,且num还没使用完时,比较到'\0'就不再比较了。

5.其他几个函数

<1>strstr函数

使用场景:用来在一个字符串中有没有出现过另一个字符串。

(1)函数原型:char * strstr ( const char * str1 , const char * str2 );

(2)函数返回字符串str2在字符串str1中第一次出现的位置,如果找到则返回第一次的起始位置,如果找不到,就返回NULL空指针。

(3)字符串的比较匹配不包含'\0'字符,以'\0'作为结束标志。

(4)简单举例一下:

(5)代码模拟的思路比较复杂:具体可以参考学习strstr函数的代码模拟实现 · zyzyzy_mhmhmh/c语言学习 - 码云 - 开源中国

也可以用其他的方法的代码来模拟实现这个函数:kmp算法(难度和深度比上面的链接中高)。

<2>strtok函数

使用场景:例如我有一个邮箱245466234@ww.com(乱写的),然后我只想要245466234 ww com这些内容,我就可以使用strtok函数来解决。

(1)函数原型:char * strtok ( char * str ,const char * sep );

(2)函数中的sep参数指向一个字符串,定义了用作分隔符的字符集合。(举例在245466234@ww.com中我就认为@和.是分隔符。);

(2)第一个参数指向一个字符串,这个字符串包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标志;

(3)strtok函数找到str中的下一个标记,并将其用'\0'结尾,然后把这个'\0'作为标记,并返回这个标记的指针。(strtok函数会改变被操作的字符串,所以被strtok函数切分的字符串一般都是临时拷贝的内容并且可以被修改。)

意思就是:245466234@ww.com在这个字符串中我会找到@和.符号并将它们都变成'\0',变成245466234\0ww.com之后\0就作为一个标记。 

(4)strtok函数的第一个参数不为空指针(NULL)时,strtok函数str中的第一个标记,strtok函数将保存它在字符串中的位置。

(5)strtok函数的第一个参数为空指针(NULL)时,函数将在同一个字符串中被保留的位置开始,寻找下一个标记。

意思就是:245466234\0ww.com在上次调用后有一个标记了,再调用一次时str位置用NULL,就会从\0从后开始寻找第二个标记了。

(6)如果字符串中不存在更多的标记,则返回空指针(NULL)。

意思就是:在最后一个标记后你再像上述一样调用这个strtok函数,则会返回空指针。

(7)根据上述描述后你会发现如果我不要知道要调用几次该怎么办呢,很明显要用到循环的方法,下面分享一个比较巧妙的方法:

这个代码巧妙运用了for循环和strtok函数的特点(再次调用时从上一次的标记开始,这种有记忆功能,猜测是不是函数里面有static修饰的变量呢?)。

<3>strerror函数

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

(1)函数原型:char * strerror ( int errornum);

(2)简单举例:

如图中我故意把错误码设置成1-9然后呈现出来了它们对应的错误信息,这就是strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回,然后我再让它呈现出来。

(3)具体使用:

如果不存在date.txt这个文件那就无法打开,运行后就会告诉你原因为什么打开文件失败。

1.与strerror函数相关的函数perror函数

  strerror函数是将错误码对应的错误信息的字符串的地址返回。

  而perror函数是直接把errno中错误的对应信息打印出来。

perror函数先打印str指向的字符串,再打印:,然后再打印一个空格,然后再打印错误码对应的错误信息。

<1>函数原型:void perror( const char * str );

<2>举例如下:

基于上一张图片加入一行代码并运行这个代码后会发现,这两行代码打印出来的结果是完全相同的。

运行上述代码后会发现,perror的作用相当于printf加上strerror。

6.小结

以上就是一些常见的字符和字符串有关的函数,是对学习的一些总结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值