【C语言】字符函数和字符串函数:字符分类函数 、字符转换函数 、 strlen 、strcpy、 strcat、strcmp的使用和模拟实现

🎬 个人主页秦苒&
专栏传送门 :《C语言

🍀指尖燃热血,代码铸锋芒;以信仰破局,向顶峰生长


🎬秦苒&的简介:


前言:由于篇幅原因,本节内容我们分两节讲。欢迎大家在评论区讨论留言!


文章目录

  • 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语言相关内容的寻宝者有所帮助,不要忘记给博主"一键三连"哦!你的每一次鼓励都为我提供 了前行的动力!

小喵很期待与你再次寻宝奥 ᰔᩚ/•᷅•᷄\୭

相关推荐
小白学大数据2 小时前
Python 网络爬虫:Scrapy 解析汽车之家报价与评测
开发语言·爬虫·python·scrapy
-Excalibur-2 小时前
关于计算机网络当中的各种计时器
java·c语言·网络·c++·笔记·python·计算机网络
小宇的天下2 小时前
Calibre nmDRC 运行机制与规则文件(13-1)
java·开发语言·数据库
tangweiguo030519872 小时前
Objective-C 核心语法深度解析:基本类型、集合类与代码块实战指南
开发语言·ios·objective-c
我命由我123452 小时前
Java 开发 - 含有 null 值字段的对象排序(自定义 Comparator、使用 Comparator、使用 Stream API)
java·开发语言·学习·java-ee·intellij-idea·学习方法·intellij idea
聆风吟º2 小时前
【C++藏宝阁】C++介绍:从发展历程到现代应用
开发语言·c++·应用领域·发展历程·起源
运维闲章印时光2 小时前
单位本部与分部网络已实现互联互通,网络访问通畅,数据传输正常
开发语言·网络·php
艾莉丝努力练剑2 小时前
艾莉丝努力练剑的2025年度总结
java·大数据·linux·开发语言·c++·人工智能·python
枫叶丹44 小时前
【Qt开发】Qt系统(一)-> 定时器 QTimerEvent 和 QTimer
c语言·开发语言·数据库·c++·qt·系统架构