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

news2024/11/16 22:46:47

目录

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,所以要“量力而行”哦。


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

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

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

相关文章

【微信小程序】-- 宿主环境 通信模型 运行机制介绍(五)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#…

NFTScan x TiDB丨一栈式 HTAP 数据库为 Web3 数据服务提供毫秒级多维查询

导读 NFTScan 是一家多链 NFT 数据基础设施服务商&#xff0c;为 Web3 用户提供高效简洁的 NFT 资产搜索查询服务&#xff0c;为 Web3 开发者和新一代金融科技公司提供专业的 NFT API 数据服务。 TiDB 作为一种分布式 HTAP 数据库&#xff0c;可以同时满足海量数据存储和高并…

I2C实验

目录 一、I2C简介 二、硬件原理 1、看原理图&#xff0c;找到I2C 2、查看使用设备 3、查看使用的IO 4、查数据手册看复用位 三、查看寄存器 1、I2C Address Register (I2Cx_IADR) 2、I2C Frequency Divider Register (I2Cx_IFDR) 3、I2C Control Register (I2Cx_I2CR) …

【C++】哈希表

1. unordered系列关联式容器 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到 &#xff0c;即最差情况下需要比较红黑树的高度次&#xff0c;当树中的节点非常多时&#xff0c;查询效率也不理想。最好的查询是&#xff0c;进行…

TCP/IP网络协议介绍及原理分析

一.应用层协议对于应用层而言&#xff0c;协议是开发者自己进行定义的&#xff0c;开发者根据自定义的格式规范对数据进行编码和解析。但是从原理上进行分析&#xff0c;其核心主要包括两点内容&#xff1a;①确定客户端和服务端交互的内容&#xff08;协议的内容&#xff09;②…

记一次docker虚拟机横向移动渗透测试

本次渗透在几个docker虚拟机间多次横向移动&#xff0c;最终找到了一个可以进行docker逃逸的出口&#xff0c;拿下服务器。渗透过程曲折但充满了乐趣&#xff0c;入口是172.17.0.6的docker虚拟机&#xff0c;然后一路横向移动&#xff0c;最终在172.17.0.2出实现了docker逃逸&a…

【免费教程】地下水环境监测技术规范HJ/T164-2020解读使用教程

地下水环境监测技术规范依据《中华人民共和国环境保护法》第十一条“国务院环境保护行政主管部门建立监测制度、制订监测规范”和《中华人民共和国水污染防治法》的要求&#xff0c;积极开展地下水环境监测&#xff0c;掌握地下水环境质量&#xff0c;保护地下水水质&#xff0…

常青科技冲刺A股上市:研发费用率较低,关联方曾拆出资金达1亿元

近日&#xff0c;江苏常青树新材料科技股份有限公司&#xff08;下称“常青科技”或“常青树科技”&#xff09;递交招股书&#xff0c;准备在上海证券交易所主板上市。本次冲刺上市&#xff0c;常青科技计划募资8.50亿元&#xff0c;光大证券为其保荐机构。 据招股书介绍&…

我的 System Verilog 学习记录(4)

引言 本文简单介绍 System Verilog 语言的 数据类型。 前文链接&#xff1a; 我的 System Verilog 学习记录&#xff08;1&#xff09; 我的 System Verilog 学习记录&#xff08;2&#xff09; 我的 System Verilog 学习记录&#xff08;3&#xff09; 数据类型简介 Sys…

Linux:共享内存api使用

代码&#xff1a; #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <arpa/inet.h> #include <sys/un.h> #include <sys/ipc.h…

Codeforces Round #849 (Div. 4)(E~G)

A~D比较简单就不写了&#xff0c;哎嘿E. Negatives and Positives给出一个数组a&#xff0c;可以对数组进行若干次操作&#xff0c;每次操作可以将相邻的两个数换为它们的相反数&#xff0c;求进行若干次操作之后能得到数组和的最大值是多少。思路&#xff1a;最大的肯定是把负…

VSCode+Qt+MinGW开发环境搭建

VSCodeQtMinGW开发环境搭建 概述 VSCode扩展性很强&#xff0c;插件机制让其具备不断演进的潜力&#xff0c;适合作为稳定的开发工具。 VSCodeQt开发环境的搭建需要依赖于以下工具&#xff1a; VSCode、Qt&#xff0c;其中Qt需要安装MinGW编译工具&#xff1b;VSCode插件&a…

常年霸榜TK彩妆类目,看Focallure菲鹿儿如何玩转出海市场

据市场调研机构弗若斯特沙利文数据报告&#xff0c;2017年至2021年&#xff0c;中国化妆品市场规模由6305亿元增长至9468亿元&#xff0c;年均复合增长率为10.7%&#xff0c;报告预计2023年中国化妆品市场规模将达11414亿元&#xff0c;今后几年的增速将逐渐放缓。随着国内市场…

LeetCode刷题系列 -- 112. 路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。叶子节点 是指没有子节点的…

外置的媒体查询,对性能又一次的优化提升

通常情况下我们写媒体查询都是写在一个样式文件中&#xff0c;对于浏览器加载的时候&#xff0c;会解析到最后一行样式时才会渲染页面&#xff0c;这样就会造成页面的白屏时间过长。 但是通常情况下大量的媒体查询样式都是无用的&#xff0c;现在浏览器允许我们在引用样式文件…

SpringBoot优雅地处理全局异常,返回前端

笔者这边提供了两种处理全局异常的方式。这两种方式各有千秋&#xff0c;都很优雅。至于伙伴们想用哪种方式&#xff0c;那就仁者见仁&#xff0c;智者见智了。0、公共部分在介绍异常处理方式前&#xff0c;先定义一些公共的类。这些类在两种处理方式中都会用到。【自定义业务异…

jupyter的安装步骤

1.安装python文件 首先去官网python去下载python的安装包&#xff0c;点击donwload,选择合适的系统。这里我是windown系统&#xff0c;点击进去&#xff0c;如图找到有installer的去下载。不建议下载最新版本的&#xff0c;会有兼容问题。 2.安装python 点击第二个选项是自己配…

深度学习如何训练出好的模型

深度学习在近年来得到了广泛的应用&#xff0c;从图像识别、语音识别到自然语言处理等领域都有了卓越的表现。但是&#xff0c;要训练出一个高效准确的深度学习模型并不容易。不仅需要有高质量的数据、合适的模型和足够的计算资源&#xff0c;还需要根据任务和数据的特点进行合…

【2023/图对比/增强】MA-GCL: Model Augmentation Tricks for Graph Contrastive Learning

如果觉得我的分享有一定帮助&#xff0c;欢迎关注我的微信公众号 “码农的科研笔记”&#xff0c;了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【2023/图对比/增强】MA-GCL: Model Augmentation Tricks for Graph Contrastive Learning 【2023/图对比/增强】MA-…

备份策略从“3-2-1”到“4-3-2-1”

在数据存储备份领域&#xff0c;说起“3-2-1”备份策略真是无人不知、如雷贯耳&#xff01;笔者也经常把“3-2-1”备份策略挂在嘴边&#xff0c;那简直就是确保数据安全的圭臬&#xff01;但是&#xff0c;最近有一位读者问我&#xff1a;“3-2-1”备份策略的出处在哪里&#x…