
🍀指尖燃热血,代码铸锋芒;以信仰破局,向顶峰生长
🎬秦苒&的简介:

前言:由于篇幅原因,本节内容我们分两节讲。欢迎大家在评论区讨论留言!
文章目录
- 1、字符分类函数
- [2. 字符转换函数](#2. 字符转换函数)
- [3. strlen的使用和模拟实现](#3. strlen的使用和模拟实现)
- 4.strcpy的使用和模拟实现
- [5. strcat的使用和模拟实现](#5. strcat的使用和模拟实现)
- [6. strcmp的使用和模拟实现](#6. strcmp的使用和模拟实现)
- 总结
- 结尾
提示:以下是本篇文章正文内容,下面案例可供参考
1、字符分类函数
C语言中有⼀系列的函数是专门做字符分类的,也就是⼀个字符是属于什么类型的字符的。
这些函数的使用都需要包含⼀个头文件是 ctype.h

这些函数的使用法非常类似,我们就讲解⼀个函数的事情,剩下的相信大家照猫画虎可以搞定的:
c
int islower ( int c );
islower 是能够判断参数部分的 c 是否是小写字母的。通过返回值来说明是否是小写字母,如果是小写字母就返回非0的整数,如果不是小写字母,则返回0。
show time:
写⼀个代码,将字符串中的小写字母转大写,其他字符不变。

2. 字符转换函数
C语言提供了2个字符转换函数:
c
int tolower ( int c ); //将参数传进去的⼤写字⺟转⼩写
int toupper ( int c ); //将参数传进去的⼩写字⺟转⼤写
这些函数定义在<ctype.h>头文件中
上面的代码,我们将小写转大写,是-32完成的效果,有了转换函数,就可以直接使toupper 函数
运行结果是一样的啦:

需要特别注意的是:
这些函数只对ASCII字符有效,不适用于非ASCII字符(如UTF-8编码的非英文字符)。
函数参数和返回值类型为int,但通常直接传递char类型即可。
使用前必须包含<ctype.h>头文件。
3. strlen的使用和模拟实现
c
size_t strlen ( const char * str );
• 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包含 '\0' )。
• 参数指向的字符串必须要以 '\0' 结束。
• 注意函数的返回值为size_t,是无符号的( 字符串长度不能为负数)
• strlen的使用需要包含头文件

strlen的模拟实现:
法一:计数器方式
c
int my_strlen(const char * str)
{
int count = 0;
assert(str);
while(*str)//解引用指针检查当前字符是否为 \0,非零则继续循环
{
count++;
str++;
}
return count;
}
法二:不能创建临时变量计数器
c
int my_strlen(const char * str)
{
assert(str);
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
法三:指针-指针的方式
c
int my_strlen(char *s)
{
assert(str);
char *p = s;
while(*p != '\0' )
p++;
return p-s;
}
4.strcpy的使用和模拟实现
c
char* strcpy(char * destination, const char * source );
• 将源指针指向的C语言字符串复制到目标指针指向的数组中,包括终止空字符(并在此处停止)。
• 源字符串必须以 '\0' 结束。
• 会将源字符串中的 '\0' 拷贝到目标空间。
• 目标空间必须足够大,以确保能存放源字符串。
• 目标空间必须可修改。
注意:

strcpy的模拟实现:
c
char* my_strcpy(char *dest, const char*src)
{
char *ret = dest;
//检查指针有效性,若 dest 或 src 为 NULL,程序终止并报错。
assert(dest != NULL);
assert(src != NULL);
while((*dest++ = *src++))
{
;
}
return ret;
}
5. strcat的使用和模拟实现
• 将源字符串的副本追加到目标字符串。destination中的终止空字符被source的第一个字符覆盖,并且空字符包含在destination中两者连接形成的新字符串的末尾。
• 源字符串必须以 '\0' 结束。
• 目标字符串中也得有 \0 ,否则没办法知道追加从哪里开始。
• 目标空间必须有足够的大,能容纳下源字符串的内容。
• 目标空间必须可修改。
接着展示:
c
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;
}
6. strcmp的使用和模拟实现
其原型为:
c
int strcmp(const char *s1, const char *s2);
两个字符串不能直接进行比较
◦ 此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续以下对,直到字符不同或到达终止空字符。
◦ 第⼀个字符串大于第二个字符串,则返回大于0的数字
◦ 第⼀个字符串等于第二个字符串,则返回0
◦ 第⼀个字符串小于第二个字符串,则返回小于0的数字
◦ 那么如何判断两个字符串? 比较两个字符串中对应位置上字符ASCII码值的大小。
比如说这两组字符串的比较:

模拟实现一下:

c
int main()
{
char arr1[]="abq";
char arr1[]="abcdef";
int ret=my_strcmp(arr1,arr2);
printf("%d\n",ret);
return 0;
}
补充VS中strcmp的返回值:
返回值为1--- >
返回值为0--- =
返回值为-1---<
总结
失踪人口重生回归,拿回属于她的一切(开玩笑啦)。接下来将持续更新str家族,请大家敬请期待!
结尾
勇敢的寻宝者啊,这次旅途你挖掘到多少宝藏呢,苒苒很期待下次与您相遇!
结语:希望对寻找C语言相关内容的寻宝者有所帮助,不要忘记给博主"一键三连"哦!你的每一次鼓励都为我提供 了前行的动力!
小喵很期待与你再次寻宝奥 ᰔᩚ/•᷅•᷄\୭
