当前位置: 首页 > news >正文

【C语言】字符分类函数+内存函数

目录

1.字符函数

1.1字符分类函数

1.2.字符转换函数 

//统一字符串中的大小写

2.内存处理函数

2.1内存拷贝函数memcpy

//模拟实现memcpy

2.2内存移动函数memmove

//模拟实现memmove

2.3内存比较函数memcmp

2.4内存设置函数memset


1.字符函数

1.1字符分类函数

头文件:#include<ctype.h>

函数参数符合下列条件返回真(正数),否则返回假(0)
iscntrl任何控制字符
isspace空白字符:'  ',' \f' ,' \n ',' \t ',' \r ',' \v '
isdigit十进制数字:0~9
isxdigit十六进制数字:0~9,a~f,A~F
islower小写字母:a~z
isupper大写字母:A~Z
isalpha字母:a~z,A~Z
isalnum字母或数字:0~9,a~z,A~Z
ispunct标点符号:即任何不属于数字或字母的图形字符(可打印)
isgraph任何图形字符
isprint任何可打印字符:包括图形字符和空白字符

1.2.字符转换函数 

头文件:#include<ctype.h>

大写转小写:tolower;  小写转大写:toupper

for example: 

//统一字符串中的大小写

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<ctype.h>int main()
{char arr[] = "i HavE aN ApPle";int i = 0;while (arr[i]){if (isupper(arr[i])){printf("%c", tolower(arr[i]));}else{printf("%c", arr[i]);}i++;}return 0;
}

 

2.内存处理函数

2.1内存拷贝函数memcpy

格式:void * memcpy ( void * destination, const void * source, size_t num );

功能:从源头 sour 拷贝 num 个字节到目的地 dest 中去。

实现memcpy功能的代码段:

 

//模拟实现memcpy

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
void* my_memcpy(void* dest, const void* src, size_t num)//void* 要返回指针
{assert(dest && src);void* ret = dest;while (num--){*(char*)dest = *(char*)src;//一个字节一个字节地拷贝dest = (char*)dest + 1;//不能写成(char*)dest++,这只是临时拷贝src = (char*)src + 1;//但是可以写成++(char*)dest}return ret;
}
int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] = { 0 };my_memcpy(arr2, arr1 + 2, 20);return 0;
}

很好用是不是?但是当重叠内存拷贝时,my_memcpy的弊端就出现了(见下图),但是memcpy可以(至少在VS编译器的库里面和memmove差不多)。我们预想的是1 2 1 2 3 4 5 8 9 10,结果却是1 2 1 2 1 2 1 8 9 10,这时就需要memmove出马了~

 

2.2内存移动函数memmove

格式:void * memmove ( void * destination, const void * source, size_t num );

功能:从源头 sour 拷贝 num 个字节到目的地 dest 中去。

实现memmove功能的代码段:

//模拟实现memmove

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<assert.h>void* my_memmove(void* dest, const void* src, size_t num)
{void* ret = dest;assert(dest && src);if (dest < src){//从前向后拷贝while (num--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}}else{//从后向前拷贝while (num--){*((char*)dest + num) = *((char*)src + num);}}
}int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };my_memmove(arr + 2, arr, 20);return 0;
}

2.3内存比较函数memcmp

格式:int memcmp ( const void * ptr1, const void * ptr2, size_t num );

功能:比较 dest 和 src 中 num 个字节,返回整数(正/负/0)。

实现memmove功能的代码段:

2.4内存设置函数memset

格式:void * memset ( void * ptr, int value, size_t num );

功能:填充内存块。

ptr:指向要填充的内存块的指针;value:要填充的值;num:要填充几个字节

 实现memmove功能的代码段:

注意:函数要用在正确的地方,如果想用此函数将 arr 数组中的0全部改成0是不行的(char arr[10]={0}; memset(arr,1,40))memset:臣妾做不到啊~~。因为这会将每个字节都改成1,即:0x00 00 00 00 --> 0x 01 01 01 01,这根本不是1,所以要“量力而行”哦。


最近有点懈怠了呀,清醒清醒清醒!!!

相关文章:

【C语言】字符分类函数+内存函数

目录 1.字符函数 1.1字符分类函数 1.2.字符转换函数 //统一字符串中的大小写 2.内存处理函数 2.1内存拷贝函数memcpy //模拟实现memcpy 2.2内存移动函数memmove //模拟实现memmove 2.3内存比较函数memcmp 2.4内存设置函数memset 1.字符函数 1.1字符分类函数 头文…...

高通平台开发系列讲解(SIM卡篇)SIM卡基础概念

文章目录 一、SIM卡基本定义二、卡的类型三、SIM卡的作用三、SIM卡基本硬件结构四、SIM卡的内部物理单元五、卡文件系统沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍SIM的相关组件。 一、SIM卡基本定义 SIM卡是一种智能卡(ICC Card/UICC Card) SIM…...

记录一次ubuntu下配置ssh登录出现的问题

现象描述: 1. 配置完服务器端公钥和本地的私钥之后&#xff0c;ssh登录始终会让输入密码&#xff0c;用ssh -vvv rootip 查看发现发送密钥之后就没反应了。 本机debug info: debug1: Trying private key: C:\Users\wangc/.ssh/id_xxxx &#xff08;私钥文件&#xff09; debug3…...

深度剖析数据在内存中的存储(下)(适合初学者)

上篇讲解了整形在内存中的存储方式&#xff0c;这篇文章就来继续讲解浮点数在内存中的存储方式。 上篇地址&#xff1a; (5条消息) 深度剖析数据在内存中的存储&#xff08;上&#xff09;_陈大大陈的博客-CSDN博客 目录&#xff1a; 3.浮点型在内存中的存储 3.1.浮点数的…...

智慧物联网系统源码:一个用于数据的收集、处理、可视化、设备管理、设备预警、报警的平台

项目简介&#xff1a; 一个用于数据的收集、处理、可视化、设备管理、设备预警、报警的平台&#xff0c;通过平台将所有设备连接起来&#xff0c;为上层应用提供设备的管理、数据收集、远程控制等核心物联网功能。 支持支持远程对设备进行实时监控、故障排查、远程控制&#…...

2023年,拥有软考证书在这些地区可以领取福利补贴

众所周知&#xff0c;软考的含金量很高&#xff0c;比如可以入户、领取技能补贴、抵扣个税、以考代评、招投标加分&#xff0c;入专家库… 今天小编给大家收集了拥有软考证书可以领取软考福利的地区&#xff0c;希望对大家有所帮助&#xff01; 【深圳】 入户 ①核准类入户:…...

使用Unity在材质球上实现绘画:详细解释每一行Shader代码!

在Unity中实现在材质球上绘画可以使用下面这个步骤&#xff1a;创建一个基础的材质球&#xff1a;在Unity的项目面板中创建一个新材质球&#xff0c;然后将其分配给您要绘画的对象。创建一个Shader&#xff1a;为了实现在材质球上绘画&#xff0c;您需要使用一种特殊的Shader。…...

Tesseract 4.0训练字库并且识别训练后的图片

各个工具下载链接在文章底部&#xff01; 重要&#xff01;&#xff01;自己先创建一个空文件夹(名字随意)&#xff0c;用来保存训练后的模型 ,还需要在里面创建一个 名称为tessdata 的文件夹 &#xff0c;必须叫这个名 可以先使用下载后的进行测试训练&#xff08;只需要把ja…...

ChatGPT热潮背后,金融行业大模型应用路在何方?——金融行业大模型应用探索

ChatGPT近两个月以来不断引爆热点&#xff0c;对人工智能应用发展的热潮前所未有地高涨&#xff0c;ChatGPT所代表的大模型在语义理解、多轮交互、内容生成中所展现的突出能力令人惊喜。而人工智能技术在金融行业的落地应用仍然面临挑战&#xff0c;虽然已经让大量宝贵的人力从…...

【怎么预防sql注入,以及还有预防其他的什么网络攻击】

SQL注入是一种常见的Web攻击&#xff0c;通过在Web应用程序中注入恶意SQL语句来获取或修改数据库中的数据。为了防止SQL注入&#xff0c;开发者可以采取以下措施&#xff1a; 1、使用参数化查询&#xff08;Prepared Statement&#xff09;或存储过程&#xff08;Stored Proce…...

2023年全国最新机动车签字授权人精选真题及答案4

百分百题库提供机动车签字授权人考试试题、机动车签字授权人考试预测题、机动车签字授权人考试真题、机动车签字授权人证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 11.使用转化炉原理测量氮氧化物的排气分析仪进行排气污…...

【Java】用记事本实现“HelloWorld”输出

【在进行以下操作前需要下载好JDK并配置好对应的环境变量】 一、在任意文件夹中创建一个新的文本文档文件并写入以下代码 public class Hello{public static void main (String[] args){System.out.print("Hello,World!");} } 二、修改文件名称及文件类型为 Hello.j…...

我希望早点知道的关于成长的建议

人上了年纪&#xff0c;往往在诸如更加闭塞&#xff0c;更加固执这些缺点之外&#xff0c;再多出来一个缺点&#xff1a;那就是动不动就爱给别人建议。我当然也未能免俗。有时候会听到同样悲观且固执的过来人告诉我&#xff0c;这些建议说了和没说效果都一样&#xff0c;人们在…...

【哈希表】使用方法总结

1. uthash简介开源的第三方头文件&#xff0c;这只是一个头文件&#xff1a;uthash.h。uthash还包括三个额外的头文件&#xff0c;主要提供链表&#xff0c;动态数组和字符串。utlist.h为C结构提供了链接列表宏。utarray.h使用宏实现动态数组。utstring.h实现基本的动态字符串。…...

【笑小枫-面试篇】Java基础面试题整理,努力做全网最全

写在前面 或许你只是想白嫖内容&#xff0c;或许你也会忽略这段文字&#xff0c;但我还是想弱弱的说 题目整理耗费了大量精力&#xff0c;希望可以给博主点赞收藏&#xff0c;谢谢大家啦 我呢&#xff0c;笑小枫&#xff0c;一个努力的普通人&#xff0c;也希望可以花1秒钟记住…...

亚马逊短期疲软,但长期前景乐观

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 由于投资者对亚马逊(AMZN)前景的担忧&#xff0c;导致该公司的股价在过去一年中下跌了39%。然而猛兽财经认为亚马逊近期面临的不利因素只是暂时的&#xff0c;该公司还是有充分的条件可以在医疗保健和物流领域获得重大增长机…...

webgis高德地图

webgis高德地图 首先准备工作,注册一个高德地图账号,然后在创建一个新应用生一个key跟appId 高德开放平台 接着创建一个html页面 高德配置手册 <style>* {margin: 0;padding: 0;}#...

django项目实战十(django+bootstrap实现增删改查)进阶数据统计

目录 一、echarts 1、下载 2、配置 二、实现统计分析页面--架构和柱图 1、url 2、chart.py 3、chart_list.html 4、修改url 5、新增chart_bar方法 6、修改chart_list.html 四、饼图 1、url 2、视图chart.py新增 3、修改chart_list.html 五、折线图 1、url 2、char…...

【布隆过滤器(Bloom Filter)基本概念与原理、Bloom Filter优点与缺点、以及应用场景】

布隆过滤器&#xff08;Bloom Filter&#xff09;基本概念与原理、Bloom Filter优点与缺点、以及应用场景 Bloom Filter 基本概念 布隆过滤器是1970年由一个叫布隆的小伙子提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在…...

unity的Rendertexture上面显示粒子特效最便捷的解决方案

一、为什么不显示 1.为什么粒子特效也不显示? 不显示是正常的,因为当前为背景的点设置为A为0时已经被剔除,当前位置粒子特效的颜色也会被剔除。 因为clip发生在融合blend之前,blend发生在所有颜色输出之后的帧缓存。 2.为什么NGUI的Unlit/Premultiplied Colored的shade…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...