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

通讯录和内存动态管理

目录

(通讯录)动态增长版                

实现效果

找单身狗

题目

源码

思路

三个内存函数的模拟实现

模拟实现strncpy

模拟实现strncat

模拟实现atoi


(通讯录)动态增长版                

该版本通讯录在原版的基础上增加了检查容量函数,实现了通讯录的动态增长

//检查是否需要增容
int CheckSz(Contact* pc)
{if (pc->count == pc->sz){PeoInfo* str = (PeoInfo*)realloc(pc->date, (pc->sz + ADD_SZ) * sizeof(PeoInfo));if (str == NULL){perror("CheckSz:");return 0;}else{pc->date = str;pc->sz += ADD_SZ;printf("增容成功\n");return 1;}}return 1;}

在使用添加函数时调用检查容量函数即可实现动态增长

实现效果

找单身狗

题目

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。

编写一个函数找出这两个只出现一次的数字。

例如:

有数组的元素是:1,2,3,4,5,1,2,3,4,6

只有5和6只出现1次,要找出5和6.

源码

void FindSingle(int* arr, int size,int* dog1,int* dog2)
{//计算所有数组异或结果ret   int i = 0;int ret = 0;for (i = 0; i < size; i++) {ret ^= arr[i];            }//计算ret第几位是1    int pos = 0;for ( i = 0; i < 32 ; i++){if ((ret >> i )& 1 == 1){pos = i;break;}}//计算第pos为1异或for (int i = 0; i < size; i++){if (((arr[i] >> pos) & 1) == 1){*dog1 ^= arr[i];}//计算第pos为0异或else{*dog2 ^= arr[i];}}}int main()
{int arr[] = { 1, 2, 3, 4, 5, 1, 2, 3, 4, 6 };int size = sizeof(arr) / sizeof(arr[0]);int dog1 = 0;int dog2 = 0;FindSingle(arr, size,&dog1,&dog2);printf("单身狗是%d %d",dog1,dog2);return 0;
}

思路

使用了异或的思想   相同为0  不同为1

(注意!异或比较的是二进制位 任何数与0的异或都为本身 而不是1)

1.计算所有数组异或结果ret   

2.计算ret第几位是1    
3.计算第pos为1异或

4.计算第pos为0异或

三个内存函数的模拟实现

模拟实现strncpy

从字符串中复制字符

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <assert.h>//char* strncpy(char* destination, const char* source, size_t num);char* my_strncpy(char* des, const char* src, int num)
{char* temp = des;assert(des != NULL);assert(src != NULL);while (*src && num--){*des = *src;des++;src++;}*des = '\0';   //将\0拷贝return temp;}int main()
{char str1[] = "To be or not to be";char str2[40];char str3[40];my_strncpy(str2, str1, 8);my_strncpy(str3, str2, 5);puts(str1);puts(str2);puts(str3);return 0;}

模拟实现strncat

从字符串追加字符

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <assert.h>//char* strncat(char* destination, const char* source, size_t num);char* my_strncat(char* des, const char* src,int num)
{assert(des);assert(src);char* temp = des;while (*des){des++;}while (*src && num--){*des++ = *src++;}*des = '\0';return temp;}int main()
{char str1[20];char str2[20];strcpy(str1, "To be ");strcpy(str2, "or not to be");my_strncat(str1,str2,6);puts(str1);return 0;
}

模拟实现atoi

将字符串转换为整数

#define _CRT_SECURE_NO_WARNING 1#include <stdio.h>#include <ctype.h>#include <assert.h>#include <limits.h>//1.空指针
//2.空字符串
//3.空白字符
//4.数字超过范围
//enum State
{TID,FID
}state = FID;//全局的转态,它的值标志返回的值是合法还是异常int my_atoi(const char* str)
{int flag = 1;assert(str);//空指针if (*str == '\0')//空字符串{return 0;}//跳过空白字符while (isspace(*str)){str++;}if (*str == '-'){flag = -1;str++;}else if (*str == '+'){str++;}long long ret = 0;while (*str != '\0'){if (isdigit(*str)){ret = ret * 10 + flag * (*str - '0');if (ret > INT_MAX || ret < INT_MIN){return 0;}}else{return (int)ret;}str++;}state = TID;return (int)ret;}int main()
{int ret = my_atoi("123");if (state == TID){printf("%d\n", ret);}else{printf("非法返回:%d\n", ret);}return 0;
}

相关文章:

通讯录和内存动态管理

目录 (通讯录)动态增长版 实现效果 找单身狗 题目 源码 思路 三个内存函数的模拟实现 模拟实现strncpy 模拟实现strncat 模拟实现atoi (通讯录)动态增长版 该版本通讯录在原版的基础上增加了检查容量函数&#xff0c;实现了通讯录的动态…...

安全渗透测试之网络基础知识(IP地址)

#1.IP地址介绍 注意:不同局域网需要有不同的网络部分,通过网络部分区别出网段/网络; 局域网内部,主机部分不能一样,否则会出现地址冲突 范围:0.0.0.0-255.255.255.255 表示:点分十进制 组成:由网络部分和主机部分组成 192.168.1.1 1.1.1.1 255.254.188.2 二进制:00000…...

dubbogo-1 基础rpc服务

文章目录 基本环境处理编译pb接口开启rpc调用业务观察qa1 能取出protoc里面的字段值吗&#xff1f; 基本环境处理 https://cn.dubbo.apache.org/zh-cn/overview/quickstart/go/install/ 这里没有 protoc-gen-go --version 执行 go get -u github.com/golang/protobuf/protoc…...

分布式缓存Spring Cache

一、缓存里的数据如何和数据库的数据保持一致&#xff1f; 缓存数据一致性1)、双写模式2)、失效模式1、缓存数据一致性-双写模式 2、 缓存数据一致性-失效模式 我们系统的一致性解决方案: 1、缓存的所有数据都有过期时间&#xff0c;数据过期下一次查询触发主动更新 2、读写数据…...

CI2454 2.4g无线MCU芯片应用

Ci2454集成MCU芯片 | Ci2454是一款集成无线收发器和 8 位 RISC&#xff08;精简指令集&#xff09;MCU 的SOC芯片。 #Ci2454芯片 集成MCU芯片# 中国芯片# 无线收发器特性&#xff1a; 工作在 2.4GHz ISM 频段 调制方式&#xff1a;GFSK/FSK 数据速率&#xff1a;2Mbps/1Mbps…...

生成包含10个随机字母或数字的字符串,然后统计每个字符的出现次数

from random import choices from string import ascii_letters, digitsx .join(choices(ascii_lettersdigits, k10)) d dict() # 创建空字典 for ch in x:d[ch] d.get(ch, 0) 1 # x中有ch字符,个数1,并作为字典的值 print(x) print(d)也可以使用collections模块的defaul…...

huggingface 模型推理几个重要到类

pipeline 它可以让您方便地使用预训练的模型进行各种任务。当您用pipeline函数创建一个图像分割的pipeline时&#xff0c;它会自动加载和初始化一个SegformerForSemanticSegmentation的实例&#xff0c;并且封装了一些预处理和后处理的逻辑&#xff0c;例如将图像转换为张量&a…...

qml之动态元素类型

文章目录 动画例子 应用动画例子 缓动曲线例子 动画分组例子 嵌套动画代码 状态和转换代码 动画 QMlL使用插值的方式控制属性的更改。动画是在指定的时间内一些列属性的持续变化。 常用的动画类型元素动画&#xff1a;PropertyAnimation:属性值改变播放动画NumberAnimation:qr…...

超详细 | 差分进化算法原理及其实现(Matlab/Python)

差分进化(Differential Evolution&#xff0c;DE)算法是由美国学者Storn和 Price在1995年为求解Chebyshev多项式拟合问题而提出的。算法主要通过基于差分形式的变异操作和基于概率选择的交叉操作进行优化搜索&#xff0c;虽然其操作名称和遗传算法相同&#xff0c;但实现方法有…...

大二第三周总结(算法+生活)

算法&#xff1a; 题目&#xff1a;有效的括号 这个题目也是做过很多回了。主要就是数据结构中”栈“的应用&#xff0c;先进后出。 解题思路&#xff1a; 1.创建 Map 哈希表形成键值对映射 2.进行遍历字符串 在遍历过程中 如果 遍历到的字符c 是左括号&#xff0c;则入栈 pu…...

Lake Formation 和 IAM 之间的区别与联系

IAM 和 Lake Formation 都是 AWS 上的权限管理服务,且默认都是自动开启并生效的,只是如果你没有特别配置过它们,可能感觉不到它们的存在,特别是Lake Formation(后文简写为 LF),通常情况下都是“透明”的,但它确实在每次请求时进行了权限检查。本文会详细介绍一下两者之…...

音频抓取代码示例

以下是一个使用DefaultsKit库的简单爬虫程序&#xff0c;用于爬取音频。代码中使用了https://www.duoip.cn/get_proxy的API获取代理服务器。 import Foundation import DefaultsKit ​ let url "https://www.douban.com/music" // 目标网站URL let proxyUrl "…...

Hexo搭建个人博客系列之环境准备

环境准备 Git Git官网&#xff0c;安装过程,就是一直下一步,详细的看这篇文章 Git的安装 Node.js Node.js官网 Node.js的安装 注册一个GitHub账号 安装hexo 新建一个文件夹(位置任意),运行cmd(若出现了operation not permitted,就以管理员的权限来运行cmd)&#xff0c;运行…...

小程序技术在信创操作系统中的应用趋势:适配能力有哪些?

小程序技术在信创操作系统中的应用前景非常广阔&#xff0c;但也面临着一些挑战和问题。开发者需要积极应对这些挑战和问题&#xff0c;为信创操作系统的发展和推广做出贡献。同时&#xff0c;开发者也需要关注小程序技术在信创操作系统中的应用趋势&#xff0c;积极探索新的应…...

word修改公式默认字体并打出漂亮公式

文章目录 word公式简介传统方法1——mathtype传统方法2——word自带公式编辑器最简洁方法——更改word自带公式字体快捷方式效果展示 word公式简介 word自带的公式字体Cambria Math不可否认很丑&#xff0c;要打出latex格式的漂亮字体很困难。使用Markdown工具很多只能导出为不…...

Day 08 python学习笔记

函数 作用域 作用域&#xff1a;变量的访问权限 全局变量与局部变量 声明在函数外边的变量----全局变量 ----》全局作用域 函数内部的变量------局部变量 ----》局部作用域顶格创建的函数也是全局的 例&#xff1a; a 100def test_01():a 0b 110print…...

Qt Designer如何安装,打开方式

Qt Designer分为PyQt5 Qt Designer、PySide6 Qt Designer&#xff0c;下面分别介绍各自的安装方式和打开方式 首先&#xff0c;检查是否安装了python&#xff0c;使用cmd打开命令行窗口&#xff0c;输入&#xff1a; python --version若出现python的版本号&#xff0c;则已安…...

《Effective C++》知识点(1)--让自己习惯C++

多年前看过的这本书(侯捷翻译的)&#xff0c;忘得差不多了&#xff0c;重温复习一下。 1. 视C为一个语言联邦 C并不只是一个带有一组守则的一体语言&#xff1b;它是从四个次语言组成的联邦(federation)政府&#xff0c;每个次语言都有自己的规约。 次语言说明CC是C的基础&am…...

UVM 验证方法学之interface学习系列文章(八)《interface不小心引入X态问题》

前面的文章学习,想必大家都对interface 有了深入了解。大家可不要骄傲哦,俗话说:小心驶得万年船。今天,再给大家介绍一个工作中,不是经常遇到,但是一旦遇到,会让你纠结很久的事情。 前面文章提到,随着验证复杂度的不断增加,interface 的bind 的操作,是必不可少的用法…...

BBR算法的几种状态

BBR&#xff08;Bottleneck Bandwidth and Round-trip propagation time&#xff09;算法根据互联网的拥塞行为定义了四种状态&#xff1a;STARTUP、DRAIN、PROBE_BW和PROBE_RTT。下面对每种状态进行详细解释&#xff0c;并说明它们之间的区别&#xff1a; STARTUP&#xff08;…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...