【剑指offer】

剑指offer

    • 面试题67:字符串转成整数
    • 面试题1:赋值运算符函数
    • 面试题3:数组中重复的数字

面试题67:字符串转成整数

LeedCode:LCR 192. 把字符串转换成整数 (atoi)

测试atoi的功能和异常效果

#include <iostream>
#include <cstdlib>using namespace std;
//测试atoi的各项功能
//atoi:将数字字符串转换成int类型的整数
void test_atoi(const char *str,int expectd)
{int ret = atoi(str);if(ret == expectd){cout<<"Test passed:atoi("<<str<<") = "<<ret<<endl;}else{cout<<"Test failed:atoi("<<str<<") = "<<ret<<endl;}
}int main()
{//正数 负数 0test_atoi("123",123);test_atoi("-123",-123);test_atoi("0",0);//边界test_atoi("2147483647",2147483647); //INT_MAXtest_atoi("-2147483648",-2147483648); //INT_MIN//非法输入test_atoi("",0);test_atoi("abc",0);test_atoi("123abc",123);test_atoi("abc123",0);//混合输入test_atoi("123 ",123);test_atoi(" 123",123);test_atoi(" -123",-123);test_atoi("-123 ",-123);//溢出 --有符号的上溢和下溢test_atoi("2147483656",21474836456);test_atoi("-2147483660",-2147483660);system("pause");return 0;
}

运行效果:
在这里插入图片描述
溢出这里atoi函数的操作和LeedCode上的要求不一样,LeedCode上简化了要求,如果上溢那就输出最大的正整数,如果下溢那就输出最小的负整数,具体的计算机溢出可以参照这篇文章:整数溢出详解

计算机中有 4 种溢出情况,以 32 位整数为例。

① 无符号上溢:无符号数 0xffffffff 加 1 会变成 0。

② 无符号下溢:无符号数 0 减去 1 会变成 0xffffffff,即-1。

③ 有符号上溢:有符号正数 0x7fffffff 加 1 变成 0x80000000, 即从 2147483647 变成了-2147483648。

④ 有符号下溢:有符号负数 0x80000000 减去 1 变成 0x7fffffff,即从-2147483648 变成了 2147483647。

因此实现把一个字符串转换成整数这个问题,需要考虑以下几点

  1. ““和” “和"0”,三种情况输出的都是0,实际上是有区别的,按照书上说的,atoi是通过全局变量来区分的,如果是非法输入,返回0并把这个全局变量设为一个特殊标记,如果输入是"0”,则返回0,不会设置全局变量,可以通过检查全局变量来查看是非法输入还是字符串"0"
  2. 正负号的判断,正负号占一个位置,并且正负号后应当紧接着就是数字,否则也是非法输入,相当于还是识别到了" "
  3. 溢出,int类型是4字节,取值范围是INT_MAX:2147483647 INT_MIN:-2147483648,这个宏定义在<limits.h>这个头文件里,可以包含然后直接用

这里提供了满足LeedCode上要求的代码,其实还有合法非法,以及溢出问题没有考虑到
下面是用C++实现的代码,

class Solution {
public:int myAtoi(string str) {int res = 0,bndry = INT_MAX/10;int i = 0,sign = 1,len = str.size();if(len == 0) return 0; //空字符串while(str[i] == ' '){if(++i == len) return 0; //空格后面全是空格}if(str[i] == '-') sign = -1; //负号if(str[i] == '+' || str[i] == '-') i++; //正号或负号for(int j = i;j<len;j++){if(str[j] <'0' || str[j] >'9') break; //非数字字符//int类型:INT_MAX:2147483647 INT_MIN:-2147483648,尾数为7和8if(res > bndry || res == bndry && str[j] >'7'){return sign == 1 ? INT_MAX : INT_MIN; //溢出}res = res*10 + (str[j]-'0');}return sign*res; }
};

用C实现的代码:

int myAtoi(char* str) {assert(str); //空指针判断if (*str == '\0') //空串判断return 0;while (isspace(*str)) { //清除空格str++;}int sign = 1; //判断正负号if (*str == '-')sign = -1;if (*str == '+' || *str == '-')str++;int ret = 0, bon = INT_MAX / 10;while (*str != '\0') {if (*str < '0' || *str > '9')break;if (ret > bon || ret == bon && *str > '7') { //溢出判断return sign == 1 ? INT_MAX : INT_MIN;}ret = ret * 10 + (*str - '0');str++;}return sign * ret;
}

书上的代码:

面试题1:赋值运算符函数

class CMyString
{
public:CMyString(char* pData = nullptr);CMyString(const CMyString& str);~CMyString(void);
private:char* m_pData;
};

面试题3:数组中重复的数字

LeedCode:442. 数组中重复的数据

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

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

相关文章

二叉树的介绍及其顺序结构的实现

Hello, 亲爱的小伙伴们&#xff0c;你们的作者菌又回来了&#xff0c;之前我们学习了链表、顺序表、栈等常见的数据结构&#xff0c;今天我们将紧跟之前的脚步&#xff0c;继续学习二叉树。 好&#xff0c;咱们废话不多说&#xff0c;开始我们今天的正题。 1.树 1.1树的概念和…

vue3框架Arco Design输入邮箱选择后缀

使用&#xff1a; <a-form-item field"apply_user_email" label"邮箱&#xff1a;" ><email v-model"apply_user_email" class"inputborder topinputw"></email> </a-form-item>import email from /componen…

Java语言程序设计基础篇_编程练习题***15.35/15.34 (动画:自回避随机漫步)

***15.34 (模拟&#xff1a;自回避随机漫步) 在一个网格中的自回避漫步是指从一个点到另一点的过程中&#xff0c;不重复两次访问一个点。自回避漫步已经广泛应用在物理、化学和数学学科中。它们可以用来模拟像溶剂和聚合物这样的链状物。编写一个程序&#xff0c;显示一个从中…

Educational Codeforces Round 168 (Rated for Div. 2)

据说这场比赛非常简单&#xff0c;但本蒟蒻却认为比以往还要难(;༎ຶД༎ຶ) A.Strong Password 输入样例&#xff1a; 4 a aaa abb password输出样例&#xff1a; wa aada abcb pastsword思路&#xff1a; 我们只需在原来字符串中连续的两个字符之间插入一个不同的字符&…

React 学习——自定义Hook实现,使用规则

使用规则&#xff1a; 只能在组件中或者其他自定义Hook函数中调用只能在组件的顶层调用&#xff0c;不能嵌套在 if、for、其他函数中 import { useState } from "react"// 封装函数 function useToggle(){const [show,setShow] useState(true);const toggle ()&…

机器学习算法——常规算法,在同的业务场景也需要使用不同的算法(二)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

火山引擎VeDI数据技术分享:两个步骤,为Parquet降本提效

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 作者&#xff1a;王恩策、徐庆 火山引擎 LAS 团队 火山引擎数智平台 VeDI 是火山引擎推出的新一代企业数据智能平台&#xff0c;基于字节跳动数据平台多年的“数据…

迪文屏使用记录

项目中要使用到迪文屏&#xff0c;奈何该屏资料太琐碎&#xff0c;找的人头皮发麻&#xff0c;遂进行相关整理。 屏幕&#xff1a;2.4寸电容屏 型号&#xff1a;DWG32240C024_03WTC 软件&#xff1a;DGUS_V7.647 1.竖屏横显 打开软件左下方的配置文件生成工具&#…

前端如何实现更换项目主题色的功能?

1、场景 有一个换主题色的功能&#xff0c;如下图&#xff1a; 切换颜色后&#xff0c;将对页面所有部分的色值进行重新设置&#xff0c;符合最新的主题色。 2、实现思路 因为色值比较灵活&#xff0c;可以任意选取&#xff0c;所以最好的实现方式是&#xff0c;根据设置的…

解读权限信息

1. 权限信息 在查看工作目录的内容时&#xff0c;经常看到如下格式的信息&#xff1a; 第一列&#xff1a;文件/文件夹的权限&#xff08;或者叫权限控制信息&#xff09;&#xff1b; 第二列&#xff1a;文件/文件夹的所属用户&#xff1b; 第三列&#xff1a;文件/文件夹…

苹果密码解锁工具已注册专业版_不限制电脑

Aiseesoft iPhone Unlocker&#xff1a;轻松解锁iPhone。功能强大&#xff1a;一键移除4位、6位密码、Touch ID和Face ID。隐私保护&#xff1a;创建密码&#xff0c;安全无忧。数据提醒&#xff1a;解锁时&#xff0c;注意数据和设置将被清除。Apple ID 解锁&#xff1a;快速删…

Redis 与 Scrapy:无缝集成的分布式爬虫技术

1. 分布式爬虫的概念 分布式爬虫系统通过将任务分配给多个爬虫节点&#xff0c;利用集群的计算能力来提高数据抓取的效率。这种方式不仅可以提高爬取速度&#xff0c;还可以在单个节点发生故障时&#xff0c;通过其他节点继续完成任务&#xff0c;从而提高系统的稳定性和可靠性…

信息系统的分类_20240731

1:信息系统的分类 1.1:业务处理系统(TPS) 又称为电子数据处理系统.TPS是服务于组织管理层次中最低层、最基础的信息系统 功能:数据输入、数据处理(批处里、OLTP)1.2:管理信息系统(MIS) 是由业务处理系统发展而来的,是在TPS基础上引进大量管理方法对企业整体信息进行处理 MI…

C#知识|文件与目录操作:目录的操作

哈喽,你好啊,我是雷工! 前边学习了文件的删除、复制、移动,接下来学习目录的操作。 以下为学习笔记。 01 效果演示 1.1、显示指定目录下的所有文件 在左侧的文本框中显示出F:\F004-C#目录下的所有文件, 演示效果: 1.2、显示指定目录下的所有子文件 在左侧的文本框中显…

【机器学习西瓜书学习笔记——模型评估与选择】

机器学习西瓜书学习笔记【第二章】 第二章 模型评估与选择2.1训练误差和测试误差错误率误差 欠拟合和过拟合2.2评估方法留出法交叉验证法自助法 2.3性能度量查准率、查全率与F1查准率查全率F1 P-R曲线ROC与AUCROCAUC 代价敏感错误率与代价曲线代价曲线 2.4比较检验假设检验&…

三品软件与合作伙伴提供管家式服务 推动企业研发管理创新

近日&#xff0c;三品软件携手核心合作伙伴&#xff0c;秉承着为本地客户提供全方位的管家式服务。坚持采用“管理咨询IT整体规划PLM本地交付”的服务模式&#xff0c;凭借卓越的服务质量和专业度&#xff0c;赢得了客户的高度信任和好评&#xff0c;并成功签约多个PLM项目。 …

SAP PowerDesigner@官网下载

背景 略 问题 略 解决 用户可以通过访问SAP支持网站的首页&#xff08;‌https://support.sap.com/home.html&#xff09;‌&#xff0c;‌然后导航到“Software Downloads”&#xff08;‌软件下载&#xff09;‌部分来访问SAP软件的下载入口。‌在这里&#xff0c;‌用户可…

第一章:为了女神小芳!【配套课时:SQL注入攻击原理 实战演练】

目录 一、原理 二、步骤 1、测试是否存在注入点 2、判断字段数 3、判断回显位置 4、判断数据库和版本 5、判断表名 6、判断字段名 7、获取表的数据 一、原理 SQL数值型注入 二、步骤 点击查看出现id&#xff0c;这里可能存在注入点 1、测试是否存在注入点 http://p…

UVC驱动分析(一)

UVC驱动分析 UVC驱动简介Linux video框架分层UVC驱动注册UVC驱动注册入口函数UVC设备探测初始化UVC描述符解析V4L2设备注册UVC控制参数初始化UVC video驱动注册UVC 状态初始化 UVC驱动简介 UVC全称为USB Video Class&#xff0c;即&#xff1a;USB视频类&#xff0c;是一种为U…

向量数据库性能测试工具(VectorDBBench.com)性价比排名

排名 向量数据库(不同硬件配置) 价格/性能比 QP$(每百万次查询所花费的价格)中型数据集, OpenAI 无标量过滤 QP$(每百万次查询所花费的价格)中型数据集, OpenAI 低标量过滤 QP$(每百万次查询所花费的价格)中型数据集, OpenAI 高标量过滤 QP$(每百万次查询所花费的价…