脆皮之“字符函数与字符串函数”宝典

hello,大家好呀,感觉我之前有偷偷摸鱼了,今天又开始学习啦。加油!!!
在这里插入图片描述

文章目录

  • 1. 字符分类函数
  • 2. 字符转换函数
  • 3. strlen的使用和模拟实现
    • 3.1 strlen 的使用
    • 3.1 strlen 的模拟
      • 1.计算器方法
      • 2.指针-指针的方法
      • 3.递归的方法
  • 4. strcpy的使用和模拟实现
  • 5. strcat的使用和模拟实现
  • 6. strcmp的使用和模拟实现
  • 7. strncpy函数的使用
  • 8. strncat函数的使用
  • 9. strncmp函数的使用
  • 10. strstr的使用和模拟实现
  • 11. strtok函数的使用
  • 12. strerror函数的使用

1. 字符分类函数

C语言中有一系列的函数是专门做字符分类的,且这些函数在使用时都需要包含头文件:ctype.h

在这里插入图片描述

这些函数的使用大同小异,我举其中的一个例子:

从上图可以看出,函数islower是用来判断是否为小写字母,我们可以在cplusplus搜索islower函数,它给出的是:如果是小写字母,则返回非0值;如果不是小写字母,则返回0.

int main()
{int c = islower('A');int q = islower('a');printf("c=%d\n", c);printf("q=%d\n", q);return 0;//打印结果是:c=0;q=2
}

练习写一个代码:将字符串中的小写字母转大写,其他字符不变。(在学习字符转换函数之后有另外一种方式,大家可以尝试一下)

#include<stdio.h>
#include<ctype.h>
int main()
{char arr[] = "I am very sad." ;int i = 0;while (arr[i] != '\0'){if (islower(arr[i])){arr[i] = arr[i] - 32;}i++;}//再将字符串输出,看是否变成大写printf("%s\n", arr);return 0;
}

2. 字符转换函数

C语言提供了2个字符转换函数:
int tolower ( int c ); ------- 转成小写--------- //将参数传进去的大写字母转小写
int toupper ( int c );------- 转成大写----------//将参数传进去的小写字母转大写
int c的意思是传入一个字符(字符的本质就是ascll码值),int tolower的意思是返回值为整数

int main()
{char ch = tolower('A');printf("%c\n", ch);char hh = toupper('a');printf("%c\n", hh);
}

之前小写转大写可以将if语句里面改掉

int main()
{char arr[] = "I am very sad." ;int i = 0;while (arr[i] != '\0'){if (islower(arr[i])){arr[i] = toupper(arr[i]);}i++;}//再将字符串输出,看是否变成大写printf("%s\n", arr);return 0;
}

3. strlen的使用和模拟实现

3.1 strlen 的使用

1.使用strlen需要包含头文件:string.h
2.字符串以’\0’ 作为结束标志。

  • 比如:“abc” 其实就是‘a’ ‘b’ ‘c’ ‘\0’,一共4个字符。但是strlen只统计’\0‘之前的字符个数。(不包含’\0’)
  • 如果字符数组中是char arr[]={‘a’,‘b’,‘c’};的话,则是没有\0的,什么时候遇到\0不确定。
int main()
{char arr[] = "aaattt";size_t len = strlen(arr);printf("%d\n", len);//6char qqq[]={'a','b'};size_t lee = strlen(qqq);printf("%d\n",lee);//随机值return 0;
}

3.strlen的返回值是size_t(即无符号整数)

int main()
{char ch1[] = "abc";char ch2[] = "abcdef";if (strlen(ch1) - strlen(ch2) < 0)//3         -      6{printf("ch1<ch2");}else{printf("ch1>ch2");}
}
//最终的结果是ch1>ch2

3-6=-3,小于0,为什么输出是大于?

在这里说明,strlen的返回值是size_t,无符号整数-无符号整数=还是无符号整数,所以strlen(ch1) - strlen(ch1)的结果其实>0,所以输出>。

如果非要比较,可以将strlen的返回值强制类型转换为int,(int)strlen(ch1)-(int)strlen(ch2)。或者直接比较: if (strlen(ch1) < strlen(ch2) )

3.1 strlen 的模拟

1.计算器方法

(1.) 这是最初的版本,之后优化。

size_t my_strlen(char* str)
{int count = 0;while (*str != '\0'){count++;//个数+1str++;//下一个元素的地址}return count;
}
int main()
{char ch[] = "aaaqqq";size_t len = my_strlen(ch);//传数组传的是数组名(这里代表的是数组首元素地址)printf("%d\n", len);
}

(2.)1.万一指针是空指针呢?我们先用断言判断一下
2.我们只是想遍历一遍数组的每个元素,找到\0,并不希望有人将元素修改了,所以用const修饰*ch

#include<assert.h>
size_t my_strlen(const char* str)//用指针变量来接收地址
{int count = 0;assert(str != NULL);while (*str != '\0'){count++;//个数+1str++;//下一个元素的地址}return count;
}
int main()
{char ch[] = "aaaqqq";size_t len = my_strlen(ch);//传数组传的是数组名(这里代表的是数组首元素地址)printf("%d\n", len);
}

2.指针-指针的方法

用起始地址-\0的地址=就是中间的元素个数

这几种方法int main函数里的内容都一样,之后就不再展示,只展示my_strlen函数里的内容

size_t my_strlen(const char* str)
{int count = 0;assert(str != '\0');int start = str;//这里str还是起始元素的地址while (*str != '\0'){//通过这个循环,使得str里面放的是\0的地址str++;}int end = str;return end - start;
}

3.递归的方法

在这里插入图片描述

size_t my_strlen(const char* str)
{if (*str != '\0')return 1 + my_strlen(str + 1);elsereturn 0;
}

4. strcpy的使用和模拟实现

5. strcat的使用和模拟实现

6. strcmp的使用和模拟实现

7. strncpy函数的使用

8. strncat函数的使用

9. strncmp函数的使用

10. strstr的使用和模拟实现

11. strtok函数的使用

12. strerror函数的使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/14404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python的shutil模块探索,文件操作的瑞士军刀

hello&#xff0c;大家好&#xff0c;我是一点&#xff0c;专注于Python编程&#xff0c;如果你也对感Python感兴趣&#xff0c;欢迎关注交流。 希望可以持续更新一些有意思的文章&#xff0c;如果觉得还不错&#xff0c;欢迎点赞关注&#xff0c;有啥想说的&#xff0c;可以留…

每周刷题第三期

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏&#xff1a;Python 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 目录 题目一&#xff1a;环形链表 题目二&#xff1a;删除有序数组中的重复项 题目三&#xff1a;有效的括号 题…

从左上角到右下角的最小距离和

题目描述&#xff1a;给定一个二维数组matrix&#xff0c;一个人必须从左上角出发&#xff0c;最后到达右下角&#xff0c;沿途只可以向下或者向右走&#xff0c;沿途的数字都累加就是距离累加和&#xff0c;返回最小距离累加和。 way&#xff1a;无他&#xff0c;dp[i] [j]表…

《队列》

描述 学校体操队到操场集合&#xff0c;排成每行2人&#xff0c;最后多出1人;排成每行3人&#xff0c;也多出1人。分别排成每行4、5、6人&#xff0c;都多出1人。当排成每行7人时&#xff0c;正好不多,求校体操队至少多少人。 输入描述 无 输出描述 满足要求的人数 样例输入…

Python语法学习之 - 生成器表达式(Generator Expression)

第一次见这样的语法 本人之前一直是Java工程师&#xff0c;最近接触了一个Python项目&#xff0c;第一次看到如下的代码&#xff1a; i sum(letter in target_arr for letter in source_arr)这条语句是计算source 与 target 数组中有几个单词是相同的。 当我第一眼看到这样…

shell遍历路径所有文件并把列表写成字符串遍历

1. ls dir/* | tr ‘\n’ ’ ’ 换行替换成空格 你可以使用 ls 命令和 tr 命令来将文件列表根据空格拼接起来成一个字符串。以下是一个示例&#xff1a; ls dir/* | tr \n 解释 ls dir/*&#xff1a;列出 dir 目录下的所有文件。tr \n &#xff1a;将所有的换行符&#xf…

ChatGPT生成常见面试题【面试准备】

ChatGPT生成常见面试题【面试准备】 前言版权ChatGPT生成常见面试题【面试准备】MySQL面试问题与回答1. 数据库连接与操作2. 索引和查询优化3. 事务管理4. 索引是什么&#xff1f;为什么使用索引可以提高查询性能&#xff1f;如何在MySQL中创建索引&#xff1f;5. SQL查询优化有…

Varjo XR-4功能详解:由凝视驱动的XR自动对焦相机系统

Varjo是XR市场中拥有领先技术的虚拟现实设备供应商&#xff0c;其将可变焦距摄像机直通系统带入到虚拟和混合现实场景中。在本篇文章中&#xff0c;Varjo的技术工程师维尔蒂莫宁详细介绍了这项在Varjo XR-4焦点版中投入应用的技术。 对可变焦距光学系统的需求 目前所有其他XR头…

WPF之容器标签之Canvas布局标签

Canvas: 定义一个区域&#xff0c;可在其中使用相对于 Canvas 区域的坐标以显式方式来定位子元素。 实例 可以在子标签使用Canvas属性设置定位 <Canvas Width"500" Height"300"><StackPanel Width"100" Height"100"Backgro…

网页抓取之requests库的使用

Python网络数据采集利器 - Requests库的使用指南 简介 在Python网络爬虫领域,优秀的第三方库Requests可谓是必学的重要工具。它提供了相当人性化的API,让我们能够用极其简洁的代码发送HTTP/HTTPS请求,并且自动处理cookies、headers、编码等诸多繁琐细节,大大减轻了网页抓取的…

【pdb的使用方法】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、 pdb 是什么&#xff1f;二、基本用法1.启动 PDB 调试器&#xff1a;2.单步执行代码&#xff1a;3.查看变量值&#xff1a;4.退出调试器&#xff1a; 三、高级用…

指数分布的理解,推导与应用

指数分布的定义 在浙大版的教材中&#xff0c;指数分布的定义如下&#xff1a; 若连续型的随机变量 X X X的概率密度为&#xff1a; f ( x ) { 1 θ e − x θ , x>0 0 , 其他 f(x) \begin{cases} \frac{1}{\theta} e^{-\frac{x}{\theta}}, & \text{x>0}\\ 0, &a…

mvn编译所有单元测试报错OOM

org.mockito.exceptions.base.MockitoException: Cannot instantiate InjectMocks field named ‘productLogic’ of type ‘class .ProductLogic’. You haven’t provided the instance at field declaration so I tried to construct the instance. However the constructo…

Python正则表达式与Excel文件名批量匹配技术文章

目录 引言 正则表达式基础 Python中的re模块 Excel文件名批量匹配案例 常见问题与解决方案 结论 引言 在现代办公环境中&#xff0c;Excel文件几乎成为了数据分析和处理的标配工具。由于Excel文件可能包含大量的数据和信息&#xff0c;因此&#xff0c;对Excel文件的命名…

在aspNetCore中 使用System.Text.Json的定制功能, 将定制化的json返回给前端

C# 默认大写, 而大部分的前端默认小写, 这时候可以如此配置: builder.Services.AddControllers().AddJsonOptions((opt) > {opt.JsonSerializerOptions.PropertyNamingPolicy System.Text.Json.JsonNamingPolicy.CamelCase;opt.JsonSerializerOptions.WriteIndented true…

DSPF网络类型实验1

对R6配置 对R1配置 对R2 对R3 对R4 对R5 对R1R2R3R4R5加用户 环回处理 然后开始配置缺省 R1有两个下一跳 3&#xff0c;4&#xff0c;5同R2 然后对R1 dynamic动态 对R2 手写 把注册加上 register R3同R2处理

机柜里面的设备有哪些

一、服务器 服务器是机柜中最常见的设备之一。它们通常被用于存储和运行数据、应用程序和服务。不同的服务器通常使用不同的操作系统和处理器架构&#xff0c;以满足不同的需求。服务器可以使用冗余电源和冗余存储空间等措施&#xff0c;以确保数据安全和可靠性。 二、交换机 交…

删除链表的倒数第N个节点-力扣

第一种方法是使用前后指针&#xff0c;前指针先向前走n1步&#xff0c;然后前后指针同时向前&#xff0c;当前指针指向NULL时&#xff0c;后指针正好指向需要删除的节点的前一个节点&#xff0c;操作后指针删除即可。 代码如下&#xff1a; /*** Definition for singly-linked…

医学图像分割

论文&#xff1a;Medical Image Segmentation Using Deep Learning: A Survey 参考&#xff1a;[医学图像分割综述] Medical Image Segmentation Using Deep Learning: A Survey-CSDN博客 一、背景 特征表示的困难&#xff1a;模糊、噪声、对比度低--->CNN属于语义分割&a…