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;}

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

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

相关文章

【C++】C++入门实战教程(打造属于自己的C++知识库)

目录 目录 写在前面 1.C学习路线 2.本教程框架介绍 一.C基础部分 1.程序编码规范 2.程序运行与编译 3.关键字 4.常用数据类型 5.运算符相关 二.C进阶部分 1.面向对象编程 2.函数编程 3.模板编程 4.多线程与并发 5.STL介绍及使用 6.内存模型与优化 三.C实战部…

C++常用算法的简单总结

1、遍历算法 for_each(iterator beg, iterator end, func) :遍历容器 transform(iterator beg1, iterator end1, iterator beg2, _func): func可以直接搬运数据&#xff0c;也可以数据加减乘除之后搬运 2、查找算法 find(iterator beg, iterator end, 需要查找的数据) 查找元素…

美国视觉AI解决方案公司Hayden AI完成9000万美元C轮融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于美国加利福尼亚州旧金山弗朗西斯科专门为智慧城市提供视觉AI解决方案的Hayden AI&#xff0c;近期宣布已完成9000万美元C轮融资。 本轮融资由The Rise Fund领投&#xff0c;Drawdown Fun…

为什么go语言里从前端接收到的参数是数字28546.123456,但是不能使用float32只能使用float64呢?

在 Go 语言中&#xff0c;当从前端&#xff08;例如通过 HTTP 请求&#xff09;接收数据时&#xff0c;这些数据通常以字符串的形式到达后端。然后&#xff0c;后端需要将这些字符串解析或转换为适当的类型&#xff0c;比如 float32 或 float64。 然而&#xff0c;如果发现你只…

股指期货存在的风险有哪些?

股指期货因其标的物的特殊性&#xff0c;其面临的风险类型十分复杂&#xff0c;主要面临的一般风险和特有风险如下&#xff1a; 一般风险 从风险是否可控的角度&#xff0c;可以划分为不可控风险和可控风险&#xff1b;从交易环节可分为代理风险、流动性风险、强制平仓风险&…

BUCK外围器件选型,输入电容,输出电容,电感,续流二极管

概述&#xff1a; 一般情况下&#xff0c;电源接口处会有大小不同的电容进行并联&#xff0c;大容量电容是为了防止自身产生干扰影响其他器件&#xff0c;所以叫去耦电容&#xff1b;小容量电容是为了其他高频干扰影响自身&#xff0c;所以叫旁路电容。当然这只是通常情况下。 …

将获取pose 服务拆分为两个服务

简单拆分 要将该代码拆分为两个服务&#xff0c;我们需要创建两个FastAPI应用。第一个服务&#xff08;我们可以称之为ImageCaptureService&#xff09;将负责捕获视频流中的图像&#xff0c;并将图像数据发送到第二个服务&#xff08;我们可以称之为PoseEstimationService&am…

深入剖析多个表left join on的执行步骤原理:实战案例解析与原理探讨

文章目录 文章导图前言初始化数据-建表两个表left jion多表-left jion on c.bidb.bid分析|执行步骤和结果理解 变形-修改c表数据变形1变形2 总结 多表-left jion on c.aida.aid分析执行步骤和结果理解 变形-修改c表数据变形1变形2 解答开头总结 Left join on系列文章测试一下你…

ubuntu添加软件快捷方式

# 该目录下存放着所有的快捷方式文件 cd /usr/share/applications/ # 创建一个快捷方式文件 sudo touch your_app_name.desktop # 编辑快捷方式文件 sudo gedit your_app_name.desktop把&#x1f447;的内容复制进your_app_name.desktop文件中&#xff0c;这是最简化版本 [Des…

数据结构第24节 二分查找

二分查找&#xff08;Binary Search&#xff09;&#xff0c;也被称为折半查找&#xff0c;是一种在有序数组中查找特定元素的高效算法。它的基本思想是将查找区间分为两部分&#xff0c;通过比较中间元素与目标值来决定下一步是在哪一半继续查找。 二分查找的步骤&#xff1a…

​Chrome 插件: GoFullPage 一键搞定全网页截图

在互联网时代&#xff0c;网页截图已成为我们日常工作和生活中不可或缺的部分。无论是保存重要信息、制作教程&#xff0c;还是分享有趣的内容&#xff0c;截图功能都显得尤为重要。然而&#xff0c;常规的截图工具往往只能截取当前屏幕的内容&#xff0c;对于长网页则显得力不…

做个简单的知识付费网站需要什么方式

网站是线上承载信息宣传的主要工具之一&#xff0c;也是企业公司发展的重要工具之一&#xff0c;除了固定信息呈现外&#xff0c;还有不少商家具备各种方式的干货输出能力&#xff0c;或者想以内容售卖获得一定营收。 如教培机构、自媒体、网校、知识生产者、领域达人等都具备…

构建艺术:在Gradle中定制化输出的精粹

构建艺术&#xff1a;在Gradle中定制化输出的精粹 引言 Gradle是一个高度可配置的构建自动化工具&#xff0c;它广泛应用于现代软件开发中。在构建过程中&#xff0c;合理地配置构建输出对于项目的构建效率、部署和维护至关重要。本文将深入探讨如何在Gradle中配置构建输出&a…

【unity笔记】九、Unity添加串口通信

unity仿真使用虚拟串口调试。下面为简单流程。 常用串口调试软件在这里下载。 1.虚拟串口 添加虚拟串口&#xff0c;这里使用com1 com2 2. 串口调试 在这里为虚拟串口发送消息。 3. unity配置 3.1 设置 在文件->生成设置->玩家设置->玩家->其他设置 中找到…

【机器学习】逻辑回归的原理、应用与扩展

文章目录 一、逻辑回归概述二、Sigmoid函数与损失函数2.1 Sigmoid函数2.2 损失函数 三、多分类逻辑回归与优化方法3.1 多分类逻辑回归3.2 优化方法 四、特征离散化 一、逻辑回归概述 逻辑回归是一种常用于分类问题的算法。大家熟悉的线性回归一般形式为 Y a X b \mathbf{Y}…

初学SpringMVC之 JSON 篇

JSON&#xff08;JavaScript Object Notation&#xff0c;JS 对象标记&#xff09;是一种轻量级的数据交换格式 采用完全独立于编程语言的文本格式来存储和表示数据 JSON 键值对是用来保存 JavaScript 对象的一种方式 比如&#xff1a;{"name": "张三"}…

「Pytorch」roLabelImg 图像异常旋转 bug

在进行Yolo-obb 模型训练的时候需要标注旋转框&#xff0c;roLabelImg 是比较推荐的一款旋转框标注工具&#xff0c;既可以标注正常的矩形框&#xff0c;还可以标注旋转框 roLabelImg Github 地址&#xff1a;https://github.com/HumanSignal/labelImg 但是在使用过程中遇到了…

SpringCloud学习

认识微服务 1.单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署 优点&#xff1a;架构简单 部署成本低 缺点&#xff1a;耦合度高 2.分布式架构&#xff1a;根据业务功能对系统进行拆分&#xff0c;每个业务模块作为独立项目开发&…

k8s record 20240710 监控

不是adaptor 是opetator 案例 监控有了&#xff0c;日志搜集呢&#xff1f; 一、kubelet 的小弟 kubelet — 负责维护容器的生命周期&#xff0c;节点和集群其他部分通信 cAdvisor 集成在 Kubernetes 的 kubelet 中&#xff0c;能够自动发现和监控集群中所有的容器。dockers…

005-基于Sklearn的机器学习入门:逻辑回归

本节将介绍机器学习中一种简单而又经典的分类算法&#xff1a;逻辑回归。 机器学习&#xff1a;逻辑回归原理_机器学习做回归的原理-CSDN博客 机器学习实战&#xff1a;Python基于Logistic逻辑回归进行分类预测&#xff08;一&#xff09;_lr逻辑回归 python-CSDN博客