C语言字符和字符串函数

本文详细介绍了C语言中字符分类、转换函数(如islower,tolower,toupper),以及字符串复制(strcpy)、长度计算(strlen)、拼接(strcat)、比较(strcmp)、截取(strncpy,strncat)、查找(strstr)、分割(strtok)等函数的用法、实现和注意事项。还涉及strerror和perror函数用于处理错误信息。
摘要由CSDN通过智能技术生成

目录

1.字符分类函数

字符分类函数的介绍

代码演示

2.字符转换函数

字符转换函数的介绍

代码演示

误区

3.strcpy函数及其模拟实现

strcpy函数的介绍

strcpy函数的模拟实现

4.strlen函数及其模拟实现

strlen函数的介绍

strlen的模拟实现

1.计数器实现

2.指针-指针实现

3.递归实现

5.strcat函数及其模拟实现

    strcat函数的介绍

     strcat函数的模拟实现

6.strcmp函数及其模拟实现

        strcmp函数的介绍

          strcmp函数的模拟实现

7.strncpy函数的使用

8.strncat函数的使用

9.strstr函数及其模拟实现

strstr函数的介绍

strstr模拟实现

10.strtok函数的使用

代码演示

11.strerror函数的使用

代码演示

perror函数


1.字符分类函数

字符分类函数的介绍

常用的及格字符分类函数如下:

以上函数的使用要包含头文件ctype.h

这些函数的用法基本一致下面我们就以islower函数为例的用法

这个函数的声明如下

可以看到我们需要传一个整形如果该整形对应的字符是小写字母就返回非0的一个数反之就返回0.

下面是代码演示:

代码演示

其他的如上函数一样。

2.字符转换函数

字符转换函数的介绍

字符转换函数的功能就是把大写字母转为小写如果本身就是小写则不操作

还有一种就是把小写字符转换为大写字母如果本身就是大写则不操作

这两种函数对应的声明如下:

对于tolower函数来说如果传入一个整数对应的字符是大写就转换为大写字母并返回该大写字母的ascll码值toupper函数也是这样的工作机制下面是代码演示

代码演示

误区

这里我们需要注意一下字符转换函数不会对要转换的值改变如下所示

就像这里的变量a里面放的是字符'a',会转换为'A'但是我们打印变量a还是字符'a';同理变量b也是这样操作的。

3.strcpy函数及其模拟实现

strcpy函数的介绍

str代表字符cpy就是copy的缩写,顾名思义就是字符的拷贝

下面是该函数的定义

在这里我们要使用该函数有以下几点:

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

2.目标字符串可以被修改

3.目标字符串的空间足够大

4.拷贝时源字符串的\0也要拷贝

下面我们来看参数destination是一个字符指针接收的是我们的目标字符串也就是把源字符串的第一个字符放在destination指向的字符;source接收的是源字符串,从source指向的字符开始往后拷贝直到把\0拷进去。下面是代码演示:

strcpy函数的模拟实现

以上代码就可以进行实现但代码太冗余我们可以改进一下

这样我们在进行循环条件判断是就完成赋值并且把\0也拷进去了同时当\0拷进去此时while循环的表达式为0循环停止。

4.strlen函数及其模拟实现

strlen函数的介绍

strlen是一个计算字符串长度的一个函数它的声明如下

下面我们来看一下这个函数返回值是一个size_t类型的值,就是字符串的长度参数呢是一个字符指针,这个函数将会从该指针往后走知道遇见\0停止。

strlen的模拟实现

1.计数器实现

这里我们对代码进行分析首先是一个assert断言fanfan防止传入指针为空让后定义一个count变量从传入的指针开始如果解引用后不是\0指针向后走这样count就记录了该字符串的长度。

2.指针-指针实现

首先还是assert断言接着定义了一个字符指针来记录传入字符串的起始位置,接着s指针往后走知道遇见\0最后返回此时s指针-起始指针的位置也就是s1这样就得出了字符串的长度。

3.递归实现

首先我们要找到递归结束的条件就是指针指向的字符是\0就返回0,如果不是那么就返回1+my_strlen3(++s),这样每次递归剥离出1个字符,到递归结束就统计了字符串的长度。

5.strcat函数及其模拟实现

    strcat函数的介绍

strcat函数就是实现字符串拼接的把一个字符串拼接到另一个字符串上声明如下:

使用的注意事项:

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

2.目标字符串可以被改变

3.目标字符串的空间足够大

4.目标字符串要有\0,为了确定从哪里开始进行拼接

     strcat函数的模拟实现

第一个while循环找到目标字符串的\0的位置

接着就是从这里开始拷贝就是strcpy的实现方式

注意事项

这里我们用自己的strcat函数无法完成自己对自己的拼接

根据我们模拟实现的函数可以看到如果自己拼接自己就会导致\0一直被覆盖循环无法结束

但库函数提供的strcat是可以完成的。下面是代码演示:

我们用自己的strcat函数自己拼接自己发现程序直接崩了那库中的strcat会吗?下面我们试一下

我们可以看到库里面的是可以的但这不意味着我们自己模拟实现的就是错的模拟实现就只是完成了它的功能那我们自己的也是可以的不能说它错了如果你想实现的跟库里面的一摸一样就比较复杂了有兴趣的可以自己试试哈~

6.strcmp函数及其模拟实现

        strcmp函数的介绍

strcmp函数是用来进行字符串的比较具体是逐个比较字符的ascll码值如果第一次比较相同则比较下一个字符知道某次比较不相等时就返回最多比较到两个字符串的\0处如果比完了就说明了这两个字符串相等。下面是库里面对其的声明

传传入两个字符串如果str1大于str2就返回大于0的数,反之返回一个小于0的数,如果相等就返回0。

          strcmp函数的模拟实现

第一个循环就是两个字符相等就往后走直到不相同。

7.strncpy函数的使用

这个函数相比strcpy函数多了一个参数就是你要拷贝的字符个数如果源字符串的字符个数小于你要拷贝的数就追加\0直到num个,反之说拷贝几个就是几个不会再追加\0。

8.strncat函数的使用

相比strcat函数也是多了你要进行拼接的字符个数

如果源字符串的字符个数小于num只会将源字符串以及\0拼接到目标函数,反之则拼接num个字符后再追加一个\0.

9.strstr函数及其模拟实现

strstr函数的介绍

其中str1这里我们叫做主串,str2我们叫做字串。这个函数就是在主串中找子串如果找到了就返回子串第一次出现在主串中的位置,找不到就返回NULL。

strstr模拟实现

这里的s1和s2指针负责维护两个字符的比较,begin指针负责记录每次主串开始匹配的位置如果不行换下一个字符直到begin指针走完如果还没找到说明就找不到l,外循环控制的就是从主串的第一个字符进行匹配,内循环里面就是每次匹配的过程如果在内循环因为字串遇到\0而停止说明字串已经便利完了说明找到了就返回此时begin指针的位置,如果是因为主串遇到\0停止或者是对应的字符不一样而停止,说明此次begin指针的匹配失败,接着begin往后走进行下一次匹配,直到begin指针遍历完整个主串还没找到就返回NULL。

10.strtok函数的使用

其中第一个参数str1是你要进行操作的字符串,参数sep指向一个字符串里面的内容是分隔符如空格,#,等等。这个函数的功能就是把一个字符串根据分隔符分割为若干个字符串,首先我们调用该函数应该传入非空指针的一个指针,这样第一次调用后就返回分割后的字符串第一个字符的地址并记录了分隔符的位置,这样在下次调用该函数时第一个参数就传入空指针NULL,这样该函数执行时会从上一次我们记录的分隔符的位置开始往后分割下一个,直到分隔符不存在了返回NULL。这里注意我们分割后源字符串的内容会被改变。

下面是代码演示:

代码演示

for循环只执行ret = strtok(arr1,base)一次,其中arr1就是我们要分割的字符串base里面就是分隔符(顺序可以随便),如果执行后后返回值不为NULL就打印分割后的字符串,接着在执行ret = strtok(NULL,base),直到ret返回NULL,这样的一个for循环就很好的分割了一个字符串。

11.strerror函数的使用

strerror函数简而言之就是用来反映库函数使用错误后的信息。就是一个库函数使用错误会返回一个错误码将该错误码传给该函数能够返回错误信息字符串的地址。方便我们进行打印

我们打开errno.h函数就可以看到里面的错误码信息。

代码演示

这样我们就可以看到错误信息了

perror函数

这个函数就像是打印和strerror函数的合体

perror 函数相当于直接将错误信息打
印出来。perror函数打印完参数部分的字符串后,再打印⼀个冒号和⼀个空格,再打印错误信息。
下面看代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值