《剑指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 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例 ...
随机推荐
- corn
http://www.cnblogs.com/itech/archive/2011/02/09/1950226.html service crond start ---查看crontab服务是否启动 ...
- Linux学习笔记之查看Linux版本信息
0x00 概述 这里所谓的Linux版本信息,包括Linux内核版本信息和Linux系统版本信息. 0x01 查看Linux内核版本信息 方法1:登陆Linux,在终端输入 cat /proc/ver ...
- 在见证了1000多家公司的兴衰灭亡之后,YC创始合伙人总结了创业公司的6个不死法则(转)
今天,我想先说一下个人消息.在 YC 工作了 11 年之后,我明年想去休假.我希望把精力放在一些项目上,说实话,我有点累了. YC 是这世界上我最喜欢的事情之一,但它也很费精力. 11 年不间断的耗费 ...
- python简说(二)list
一.list # 1.list 列表 数组a = ['A', 'B', 'C', 'D']# 0 1 2# 2.空list# a = []# a = list()# 3.下标 角标 索引# print ...
- [c/c++] programming之路(11)、顺序分支
一.模块化设计 #include<stdio.h> #include<stdlib.h> #include<windows.h> void openbaidu(){ ...
- 20155201 网络攻防技术 实验五 MSF基础应用
20155201 网络攻防技术 实验五 MSF基础应用 一.实践内容 一个主动攻击实践,如ms08_067 一个针对浏览器的攻击,如ms11_050 一个针对客户端的攻击,如Adobe 成功应用任何一 ...
- NOIP模拟题 2017.11.6
题目大意 给定一个大小为n的数组,从中选出一个子集使得这个子集中的数的和能被n整除. 假设开始我没有做出来,那么我就random_shuffle一下,然后计算前缀和,有一个能被n整除,就输出答案.于是 ...
- 【python35.2--图形用户界面EasyGui】
一.猜字游戏 #猜字游戏(从1到10) import easygui as g import random g.msgbox('欢迎进入探险之路!') screct = random.randint( ...
- centOS6.8开放防火墙端口
1.找到防火墙配置文件,/etc/sysconfig/iptables.如果是新装的linux系统,防火墙默认是被禁掉的,没有配置任何防火墙策略,所以不存在iptables.需要在控制台使用iptab ...
- Install Virtualbox on ubuntu
1.Use the command: sudo apt-get install virtualbox