《剑指offer》第六十七题(把字符串转换成整数)
- // 面试题67:把字符串转换成整数
- // 题目:请你写一个函数StrToInt,实现把字符串转换成整数这个功能。当然,不
- // 能使用atoi或者其他类似的库函数。
- #include <iostream>
- long long StrToIntCore(const char* str, bool minus);
- enum Status { kValid = , kInvalid };
- int g_nStatus = kValid;//设置全局错误变量,用来反映无效输入
- int StrToInt(const char* str)
- {
- g_nStatus = kInvalid;
- long long num = ;//可能是大数,注意long long
- if (str != nullptr && *str != '\0')//无效输入情况,空指针和头结点为'\0'
- {
- bool minus = false;//设置局部变量,反映正负号
- if (*str == '+')
- str++;
- else if (*str == '-')
- {
- str++;
- minus = true;
- }
- if (*str != '\0')//需要再次判断
- num = StrToIntCore(str, minus);
- }
- return (int)num;
- }
- long long StrToIntCore(const char* digit, bool minus)
- {
- long long num = ;
- while (*digit != '\0')//如果不为'\0'
- {
- if (*digit >= '' && *digit <= '')//且字符是0~9之间的字符
- {
- int flag = minus ? - : ;//是负数吗
- num = num * + flag * (*digit - '');//使用负数加到num里
- if ((!minus && num > 0x7FFFFFFF)//如果向上溢出了,还有一个符号位供缓冲
- || (minus && num < (signed int)0x80000000))//向下溢出,同理,都返回0
- {
- num = ;
- break;
- }
- digit++;
- }
- else//要是有非正常字符,返回0
- {
- num = ;
- break;
- }
- }
- if (*digit == '\0')//如果只有字符'0',g_nStatus是有效的,其他返回0的情况,g_nStatus都是无效的
- g_nStatus = kValid;
- return num;
- }
- // ====================测试代码====================
- void Test(const char* string)
- {
- int result = StrToInt(string);
- if (result == && g_nStatus == kInvalid)
- printf("the input %s is invalid.\n", string);
- else
- printf("number for %s is: %d.\n", string, result);
- }
- int main(int argc, char* argv[])
- {
- Test(nullptr);
- Test("");
- Test("");
- Test("+123");
- Test("-123");
- Test("1a33");
- Test("+0");
- Test("-0");
- //有效的最大正整数, 0x7FFFFFFF
- Test("+2147483647");
- Test("-2147483647");
- Test("+2147483648");
- //有效的最小负整数, 0x80000000
- Test("-2147483648");
- Test("+2147483649");
- Test("-2147483649");
- Test("+");
- Test("-");
- system("pause");
- return ;
- }
《剑指offer》第六十七题(把字符串转换成整数)的更多相关文章
- 剑指offer四十九之把字符串转换成整数
一.题目 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 二.思路 详见代码. 三.代码 public class Solution { ...
- 《剑指offer》面试题67. 把字符串转换成整数
问题描述 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. ...
- 剑指Offer(二十七):字符串的排列
剑指Offer(二十七):字符串的排列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baid ...
- 《剑指offer》第二十七题(二叉树的镜像)
// 面试题27:二叉树的镜像 // 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像. #include <iostream> #include "BinaryTree ...
- 《剑指offer》第十七题(打印1到最大的n位数)
// 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. #include <ios ...
- 剑指Offer(三十七):数字在排序数组中出现的次数
剑指Offer(三十七):数字在排序数组中出现的次数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.n ...
- 剑指offer第六章
剑指offer第六章 1.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在数组中出现了4次,所以输出4 分析:思路1 ...
- 力扣 - 剑指 Offer 67. 把字符串转换成整数
题目 剑指 Offer 67. 把字符串转换成整数 思路1 根据题意,要解决这题,首先要判断的条件有: 不包括首位空格 第一位必须为:+.-.数字三者其一,否则不合法 数字必须连续的,如果遇到非数字, ...
- 【Java】 剑指offer(67) 把字符串转换成整数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请你写一个函数StrToInt,实现把字符串转换成整数这个功能 ...
- 剑指Offer - 九度1508 - 把字符串转换成整数
剑指Offer - 九度1508 - 把字符串转换成整数2014-02-06 23:46 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例 ...
随机推荐
- K8S学习笔记之Kubernetes核心概念
0x00 Kubernetes简介 Kubernetes(K8S)是Google开源的容器集群管理系统,其设计源于Google在容器编排方面积累的丰富经验,并结合社区创新的最佳实践. K8S在Doc ...
- Java学习笔记之Linux下的Java安装和配置
0x00 概述 由于使用 yum 或者 apt-get 命令 安装 openjdk 可能存在类库不全,从而导致用户在安装后运行相关工具时可能报错的问题,所以此处我们推荐采用手动解压安装的方式来安装 J ...
- jQuery常用插件与jQuery使用validation插件实现表单验证实例
jQuery常用插件 1,jQuery特别容易扩展,开发者可以基于jQuery开发一些扩展动能 2,插件:http://plugins.jquery.com 3,超厉害的插件:validation . ...
- windows10 hyper-v安装配置centos6.8
27.PNG 选择最小化安装,并在界面下方选中自定义额外的安装包 28.PNG 选择额外的安装包 29.PNG 选择额外的安装包 30.PNG 终于开始安装了 31.PNG 安装完毕,重启 32.PN ...
- CCF 推荐国际国内会议及中文核心期刊要目总览
CCF 推荐国际国内会议及<中文核心期刊要目总览> Ref :http://www.ccf.org.cn/xspj/rgzn/ Notes: dblp 是一个好网站,上面有各种主要会议的论 ...
- Debian\CentOS Linux配置管理
CentOS 6 安装 gcc-4.8 以支持 C++11 1.下载 repo 文件 wget http://people.centos.org/tru/devtools-2/devtools-2.r ...
- opencv学习之路(14)、形态学之膨胀腐蚀
一.膨胀腐蚀概述(对高亮部分进行操作) 二.膨胀 三.腐蚀 四.代码 1.查看结构元素 #include<opencv2/opencv.hpp> #include<iostream& ...
- kali linux 64bit 2019.1a下启动bbqsql:No module named coros
kali linux 64bit 2019.1a下bbqsql启动失败,错误: File "/usr/local/lib/python2.7/dist-packages/bbqsql/lib ...
- 动态规划之91 decode ways
题目链接:https://leetcode-cn.com/problems/decode-ways/description/ 参考:https://www.jianshu.com/p/5a604070 ...
- Difference between ID and control.ClientID OR why use control.ClientID if I can access control through ID
https://stackoverflow.com/questions/3743582/difference-between-id-and-control-clientid-or-why-use-c ...