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

【剑指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. 数组中重复的数据

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Swift学习入门,新手小白看过来
  • package:mine android studio新过滤规则及其用法 Filter使用技巧
  • 【AI大模型】-- 应用部署
  • 经典文献阅读之--World Models for Autonomous Driving(自动驾驶的世界模型:综述)
  • 贪心算法总结(2)
  • 排序算法:冒泡排序,golang实现
  • 20.rabbitmq插件实现延迟队列
  • JAVA(IO流-字节流)day 7.29
  • php将数字转为中文汉字
  • 计算机毕业设计LSTM+Tensorflow股票分析预测 基金分析预测 股票爬虫 大数据毕业设计 深度学习 机器学习 数据可视化 人工智能
  • Javascript前端面试基础4【每日学习并更新10】
  • IndexError: list index out of range
  • 物联网架构之Hadoop
  • 区块链软硬件协同,做产业数字化转型的“安全官” |《超话区块链》直播预告
  • 【C++】学习笔记——C++11_1
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • css系列之关于字体的事
  • iOS 系统授权开发
  • Mysql5.6主从复制
  • ReactNativeweexDeviceOne对比
  • React-生命周期杂记
  • Sass 快速入门教程
  • SOFAMosn配置模型
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Windows Containers 大冒险: 容器网络
  • - 概述 - 《设计模式(极简c++版)》
  • 和 || 运算
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 利用DataURL技术在网页上显示图片
  • 爬虫模拟登陆 SegmentFault
  • 设计模式(12)迭代器模式(讲解+应用)
  • 首页查询功能的一次实现过程
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 因为阿里,他们成了“杭漂”
  • C# - 为值类型重定义相等性
  • kubernetes资源对象--ingress
  • Spring第一个helloWorld
  • 仓管云——企业云erp功能有哪些?
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​浅谈 Linux 中的 core dump 分析方法
  • # 数仓建模:如何构建主题宽表模型?
  • #define用法
  • #FPGA(基础知识)
  • #QT项目实战(天气预报)
  • (1)bark-ml
  • (2022 CVPR) Unbiased Teacher v2
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Git) gitignore基础使用
  • (js)循环条件满足时终止循环
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (四) 虚拟摄像头vivi体验