字符函数与字符串函数详解

🎁🎁创作不易,关注作者不迷路🎀🎀


前言

文章干货满满,还请您细细品读,如果您细心读完,相信您对于字符函数和字符串函数的理解将上升一定维度如果您觉得作者写得不错,抑或对您有所帮助,不妨给俺点个免费的赞和玩玩呢?     关注作者不迷路,后续将有更多原创内容更新哟


在编程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语⾔标准库中提供了⼀系列库函数,接下来我们就学习⼀下这些函数。

一、字符分类函数

C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使⽤都需要包含⼀个头⽂件是 ctype.h

这些函数的使⽤⽅法⾮常类似,我们就讲解⼀个函数的事情,其他的⾮常类似:

int islower ( int c );

islower 是能够判断参数部分的 c 是否是⼩写字⺟的。
通过返回值来说明是否是⼩写字⺟,如果是⼩写字⺟就返回⾮0的整数如果不是⼩写字⺟,则返回0。

二、字符转换函数

C语⾔提供了2个字符转换函数:

int tolower ( int c );                 //将参数传进去的⼤写字⺟转⼩写 
int toupper ( int c );                 //将参数传进去的⼩写字⺟转⼤写


三、 strlen的使⽤和模拟实现

size_t strlen ( const char * str );

1.在使用时,需要注意的事项:

        • 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包
        含 '\0' )。
        • 参数指向的字符串必须要以 '\0' 结束。
        • 注意函数的返回值为size_t,是⽆符号的( 易错 )
        • strlen的使⽤需要包含头⽂件

2.strlen的模拟实现:

在对strlen函数实现时,我们考虑到使用递归函数的思想进行实现,以表达式  1+my_strlen(str+1) 来实现大事化小的目的;再给出终止条件,实现回归,得到结果。具体思想如下:

代码如下:

int my_strlen(const char * str)
{
 assert(str);
 if(*str == '\0')
 return 0;
 else
 return 1+my_strlen(str+1);
}

当然,亦存在其他实现方式,如   指针-指针的⽅式 等等,有兴趣不妨您进行思考,将答案展现在评论区让给多读者看到您的智慧。


四、strcpy的使⽤和模拟实现

char* strcpy(char * destination, const char * source );

•源字符串必须以 '\0' 结束。
会将源字符串中的 '\0' 拷⻉到⽬标空间。
• ⽬标空间必须⾜够⼤,以确保能存放源字符串。
• ⽬标空间必须可修改。

以下举出strcpy使用时的常见错误,望读者避免:

                                                这里数组arr2中仅存放一个数字零,导致arr1在复制后,存放到arr2中时没有足够的空间存放而发生错误                                                                                                                                                                                                p中存放的是一个常量字符串的地址,不满足目标空间必须是可修改的这一要求

strcpy的模拟实现:

char* my_strcpy(char *dest, const char*src)
{ 
 char *ret = dest;
 assert(dest != NULL);
 assert(src != NULL);
 
 while((*dest++ = *src++))
 {
 ;
 }
 return ret;
}

针对这里的判断条件while((*dest++ = *src++))解释一下,以方便读者理解。                       

*dest++ = *src++这里是后置加加先调用再加加,意思是先将*src赋给*dest后两指针再分别向后移动一位,当src移动到‘\0’时赋给*dest后,括号内就等价于0条件为假,跳出循环


五、 strcat的使⽤和模拟实现

使用strcat函数时,需要注意以下几点:

• 源字符串必须以 '\0' 结束。
• ⽬标字符串中也得有‘ \0’ ,否则没办法知道追加从哪⾥开始
• ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。
• ⽬标空间必须可修改。

模拟实现strcat函数:

char *my_strcat(char *dest, const char*src)
{
 char *ret = dest;
assert(dest != NULL);
 assert(src != NULL);
 while(*dest)
 {
 dest++;
 }
 while((*dest++ = *src++))
 {
 ;
 }
 return ret;
}

对比发现,strcat函数实现时,与strcpy函数实现二者的代码中判断条件均为 while((*dest++ = *src++)),想必不必再做解释,唯一区别在于判断条件前边又加入一个条件,这里是将指针位置移动至目标字符的‘\0’处。

那么此时我们思考一个问题,字符串⾃⼰给⾃⼰追加,如何?

显然这是一个死循环问题,因为在使用该函数时,会将目标字符串的‘\0’替代掉,而没有‘\0’就失去了结束标志,进而程序将无休止的进行下去,形成死循环。

图解如下:


六、strcmp的使⽤和模拟实现

• 标准规定:
◦ 第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
◦ 第⼀个字符串等于第⼆个字符串,则返回0
◦ 第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字
◦ 那么如何判断两个字符串? ⽐较两个字符串中对应位置上字符ASCII码值的⼤⼩。

strcmp函数的模拟实现:

int my_strcmp (const char * str1, const char * str2)
{
 int ret = 0 ;
 assert(str1 != NULL);
 assert(str2 != NULL);
 while(*str1 == *str2)
 {
 if(*str1 == '\0')
 return 0;
 str1++;
 str2++;
 }
 return *str1-*str2;
}


七、strncpy函数的使⽤

char * strncpy ( char * destination, const char * source, size_t num );

•对比发现,strncpy相比于strcpy多出一个参数size_t num ,此参数用于控制拷⻉从源字符串到⽬标空间的字符个数。

• 如果源字符串的⻓度⼩于num,则拷⻉完源字符串之后,在⽬标的后边追加0,直到num个。


八、strncat函数的使⽤

char * strncat ( char * destination, const char * source, size_t num );


九、 strncmp函数的使⽤

int strncmp ( const char * str1, const char * str2, size_t num );

⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回0.


以上就是关于【C语言篇】qsort函数超详细讲解拆分 +【C语言指针详解(四)】的内容啦,各位大佬有什么问题欢迎在评论区指正,您的支持是我创作的最大动力!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值