c++课后作业
把字符串转换为整数
int main()
{char pn[21];cout << "请输入一个由数字组成的字符串: ";cin >> pn;int last = 0;int res[10];int j = strlen(pn);int idx = 2;cout << "请选择(2-二进制,10-十进制): ";cin >> idx;for (int i = 0,len = strlen(pn);i < len; i++){if (pn[i] < '0' || pn[i] > '9') { cout << "非法字符!!!"; break; }last += (pn[i] - '0') * pow(idx,j-1);j = j - 1 ;}cout << last;
}
重写strcat和strncat
char* mystrcat(char* dest, const char* src)
{memcpy(dest + strlen(dest), src, strlen(src) + 1);return dest;
}char* mystrncat(char* dest, const char* src, const size_t n)
{size_t len = strlen(dest);memcpy(dest + len, src, n);*(dest + len + n) = 0;return dest;}
重写strchr和strrchr
注意⚠️:这里不能从后往前找,因为想从后往前找就只能使用strlen,而strlen本质就是遍历一遍字符串,这样就更慢了。
const char* mystrchr(const char* s, int c)
{char* p = (char*)s;while (*p){if (*p == c) return p;p++;}return 0;
}const char* mystrrchr(const char* s, int c) //查找字符
{char* p = (char*)s;char* p1 = 0;while (*p){if (*p == c){p1 = p;}p++;}return p1;}
重写strcmp和strncmp
int mystrcmp(const char* str1, const char* str2)
{char* p1 = (char*)str1;char* p2 = (char*)str2;while (*p1 && *p2){if (*p1 != *p2){if (*(p1) > *(p2)) return -1;else return 1;}p1++;p2++;}return 0;
}int mystrncmp(const char* str1, const char* str2, size_t n)
{char* p1 = (char*)str1;char* p2 = (char*)str2;for (int i = 0; i < n; i++){if (*p1 != *p2){if (*(p1) > *(p2)) return -1;else return 1;}p1++;p2++;}return 0;}
重写strstr
char* caijimystrstr(const char* haystack, const char* needle)
{char* p1 = (char*)haystack;char* p2 = (char*)needle;char* tmp1;char* tmp2 = p2;while (*p1){while (*p1 == *p2){tmp1 = p1;for (int i = 0; i < strlen(needle); i++){if (*p1 != *p2){continue;}p1++;p2++;if (*p2 == 0){return p1-strlen(needle);}}continue;}p2 = tmp2;p1++;}return nullptr;}const char* dalaomystrstr(const char* haystack, const char* needle)
{size_t ii = 0, jj = 0; size_t len = strlen(haystack), slen = strlen(needle);while ((ii < len) && (jj < slen)){if (haystack[ii] == needle[jj]){ii++, jj++;}else{ii = ii - jj;jj = 0;ii++;}}if (jj == slen) return (haystack+(ii-jj));return 0;
}
解析XML
bool xmlbuffer(const char* xmlbuf, const char* fieldname, char* value = 0, const size_t ilen = 0)
{if (xmlbuf == 0 || fieldname == 0) return false;//创建字段int lenfieldname = strlen(fieldname);//开辟空间char* sfieldname = new char[lenfieldname + 3];char* efieldname = new char[lenfieldname + 4];//初始化memset(sfieldname, 0, lenfieldname +3); // 错误代码 memset(sfieldname, 0, sfieldname); 原因:new出来的空间不能用memsetmemset(efieldname, 0, lenfieldname +4);//创建字段strcpy(sfieldname, "<"); strcat(sfieldname, fieldname); strcat(sfieldname,">");strcpy(efieldname, "</"); strcat(efieldname, fieldname); strcat(efieldname, ">");//找字段;char* start;char* end;start = (char*)strstr(xmlbuf, sfieldname);end = (char*)strstr(xmlbuf, efieldname);//没找到if (start == 0 || end == 0){delete[] sfieldname;delete[] efieldname;return 0;}size_t vallen = (end - start - lenfieldname - 2); //指针减去指针等于数值,表示的是从 start 到 end 的距离减去了 lenfieldname(<fieldname> 的长度)和 2(< 和 > 的长度)。if (ilen == 0){strncpy(value, start + lenfieldname + 2, vallen);value[vallen] = 0;}else if (vallen <= ilen){strncpy(value, start + lenfieldname + 2, vallen);value[vallen] = 0;}else{strncpy(value, start + lenfieldname + 2, ilen);value[ilen] = 0;}delete[] sfieldname;delete[] efieldname;return 1;}
不重复的随机数
void rrand(int arr[], const size_t len, const int minvalue = 0)
{srand(time(0));for (int i = 0; i < len; i++){while (1){int tmp = rand() % len + minvalue;int j = 0;for (j = 0; j < i; j++){if (tmp == arr[j]) break;}if (j == i){arr[i] = tmp;break;}}}
}
重写strcpy和strncpy
char* my2strcpy(char* dest, const char* src)
{int i = 0;while (src[i]){dest[i] = src[i];i++;}dest[i] = 0;return dest;
}char* my2strncpy(char* dest, const char* src , const size_t n )
{if (n < 0) return 0;size_t lens = strlen(src);if (n > lens){my2strcpy(dest, src);}int i = 0;for (i = 0; i < n; i++){dest[i] = src[i];}dest[i++] = 0;return dest;}
相关文章:
c++课后作业
把字符串转换为整数 int main() {char pn[21];cout << "请输入一个由数字组成的字符串: ";cin >> pn;int last 0;int res[10];int j strlen(pn);int idx 2;cout << "请选择(2-二进制,10-十进制…...

SpringBoot+Vue实现简单的文件上传(txt篇)
SpringBootVue实现简单的文件上传 1 环境 SpringBoot 3.2.1,Vue 2,ElementUI 2 页面 3 效果:只能上传txt文件且大小限制为2M,选择文件后自动上传。 4 前端代码 <template><div class"container"><el-…...
LLMs之RAG:GraphRAG(本质是名词Knowledge Graph/Microsoft微软发布)的简介、安装和使用方法、案例应用之详细攻略
LLMs之RAG:GraphRAG(本质是名词Knowledge Graph/Microsoft微软发布)的简介、安装和使用方法、案例应用之详细攻略 导读:2024年7月3日,微软正式开源发布GraphRAG。GraphRAG可以提高大型语言模型在私有数据集上的推理能力。 背景痛点࿱…...
Linux 之前的 Unix 桌面沉浮启示录
It takes more than open source, it takes open standards and consensus 仅仅开源还不足以实现开放,还需开放标准和建立共识 Steven J. Vaughan-Nichols Sat 27 Jan 2024 // 12:33 UTC 现在,由于有了安卓和 ChromeOS,Linux 已成为重要的终端…...
面试问题梳理:项目中防止配置中的密码泄露-Jasypt
背景 想起面试的时候,面试官问我现在大家用Spring框架,数据库、ES之类的密码都是配置在配置文件中的,有很大的安全隐患,你有考虑过怎么解决嘛? 当时我回答是可以在项目启动的过程中的命令行追加的方式,感觉…...
engine.addImportPath()用于向 QML 引擎添加新的模块搜索路径
engine.addImportPath() 是 QQmlApplicationEngine 类中的一个方法,用于向 QML 引擎添加新的模块搜索路径。这在需要加载自定义模块或从非标准位置加载 QML 文件时非常有用。通过使用 addImportPath() 方法,可以让 QML 引擎在额外的路径中查找 QML 模块。…...

ServiceNow UI Jelly模板注入漏洞复现(CVE-2024-4879)
0x01 产品简介 ServiceNow 是一个业务转型平台。通过平台上的各个模块,ServiceNow 可用于从人力资源和员工管理到自动化工作流程或作为知识库等各种用途。 0x02 漏洞概述 由于ServiceNow的Jelly模板输入验证不严格,导致未经身份验证的远程攻击者可通过构造恶意请求利用,在…...

项目部署笔记
1、安全组需开放(如果不开放配置nginx也访问不到) 2、域名解析配置IP(子域名也需配置IP,IP地址可以不同) 3、如果出现图片获其他的文件找不到的情况请仔细检查一下路径是否正确 4、服务器nginx配置SSL证书后启动报错: nginx: […...
PyCharm\VsCode——Python第三方库下载换源
为什么要换源? Python第三方库下载默认镜像源在国外,因为特殊的原因在国内的你我利用这个镜像源往往速度会非常地慢,因此为了提速将这个默认镜像源换成国内的镜像源是非常有必要的。 镜像源的种类有哪些? 国外镜像源——官方 http…...

图片上传裁剪react-cropper
效果图 安装插件 npm i react-cropper 或者 yarn add react-cropper 主要代码 import React, { useRef, useState } from react; import Cropper from react-cropper; import cropperjs/dist/cropper.css; import ./index.less; import { UploadOutlined } from ant-d…...
跨越空间的编码:在PyCharm中高效使用远程解释器
跨越空间的编码:在PyCharm中高效使用远程解释器 PyCharm的强大功能之一是支持远程解释器,这使得开发者能够在远程服务器或虚拟机上运行、调试代码,享受本地开发环境的便利。本文将详细介绍如何在PyCharm中配置和使用远程解释器,包…...
Vue3单文件jsx输出多组件示例遇到的坑
感谢博主减肥吧Evan提供的SFC实现多组件的思路和实现,小卷在大佬的基础上再完善下实现。 我们从tsx的API使用上得到启发,可以在vue的单文件组件(sfc)中使用defineComponent来定义和导出多个独立的小组件。此时sfc中的<templat…...
OpenCV中的轮廓检测cv2.findContours()
文章目录 前言一、查找轮廓二、绘制轮廓轮廓面积轮廓周长 前言 轮廓提取的前提,将背景置为黑色,目标为白色(利用二值化或Canny) 边缘检测,例如Canny等,利用梯度变化,记录图像中的边缘像素点&a…...

JFlash读取和烧录加密stm32程序
JFlash读取和烧录加密stm32程序 安装后JFlash所在的目录:C:\Program Files\SEGGER\JLink 一、烧写加密程序 1、打开C:\Program Files\SEGGER\JLink目录,找到JFlash.exe,双击它,就可以打开该执行程序。见下图: 2、选择“Create …...

【总结】实际业务场景中锁、事务、异常如何考虑使用?
文章目录 锁处理目的:考虑锁控制思路:生命周期接口并发控制解决方案:测试锁是否生效:模拟多线程并发场景的2种方式: 事务处理目的:考虑事务控制思路:解决方案: 总结 锁处理 目的&am…...

Pytorch使用Dataset加载数据
1、前言: 在阅读之前,需要配置好对应pytorch版本。 对于一般学习,使用cpu版本的即可。参考教程点我 导入pytorch包,使用如下命令即可。 import torch # 注意虽然叫pytorch,但是在引用时是引用torch2、神经网络获取…...
【nginx】nginx的优点
目录 一、高性能1.1 高并发处理1.2 低内存消耗1.3 快速响应 二、高扩展性2.1 模块化设计2.2 动态模块扩展 三、高可靠性3.1 核心框架稳定3.2 进程管理3.3 负载均衡与健康检查3.4 热部署 四、功能丰富4.1 反向代理4.2 HTTP缓存4.3 安全功能 五、易于配置和管理5.1 配置文件简单5…...

K8S ingress 初体验 - ingress-ngnix 的安装与使用
准备环境 先把 google 的vm 跑起来… gatemanMoreFine-S500:~/projects/coding/k8s-s/service-case/cloud-user$ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane,master 124d v1.23.6 k8s-no…...
qt 获取父控件
在 Qt 中,你可以通过调用 QWidget 的 parentWidget() 方法来获取一个控件的父控件。这个方法会返回一个指向父控件的指针,如果该控件没有父控件,则返回 nullptr。 以下是一个简单的示例,展示了如何获取一个按钮的父控件ÿ…...
flask基础配置详情
前言 一个简单的应用 app Flask(__name__) app.route("/") def hello_world():return "<p>Hello,World!"运行Flask应用 #flask命令运行flask --app hello run#使用Python命令进行运行python -m flask # 作为一个捷径,如果文件名为 app…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...