JZ-C-49

剑指offer第四十九题:把字符串转换为整数

  1 //============================================================================
  2 // Name        : JZ-C-49.cpp
  3 // Author      : Laughing_Lz
  4 // Version     :
  5 // Copyright   : All Right Reserved
  6 // Description : 把字符串转换为整数
  7 //============================================================================
  8
  9 #include <iostream>
 10 #include <stdio.h>
 11 #include <stdlib.h>
 12 using namespace std;
 13
 14 long long StrToIntCore(const char* str, bool minus);
 15
 16 enum Status {
 17     kValid = 0, kInvalid //此时kInvalid为1,如果没有定义enum变量的需求,枚举变量的值可以省略。在以上形式下,第一个值默认值为0,以下各个分别为上一个值加1。
 18 };
 19 int g_nStatus = kValid;//定义全局变量,反映输入是否合法
 20
 21 int StrToInt(const char* str) {
 22     g_nStatus = kInvalid;//初始为1:不合法
 23     long long num = 0;//用long long型存储转换的str,实际返回的则是int型★
 24
 25     if (str != NULL && *str != ‘\0‘) {//考虑空指针NULL或字符串为空"",函数直接返回0,且全局变量g_nStatus为1,不合法
 26         bool minus = false;//考虑正负
 27         if (*str == ‘+‘)
 28             str++;
 29         else if (*str == ‘-‘) {
 30             str++;
 31             minus = true;
 32         }
 33
 34         if (*str != ‘\0‘) {
 35             num = StrToIntCore(str, minus);
 36         }
 37     }
 38
 39     return (int) num;//将long long型num转为int
 40 }
 41
 42 long long StrToIntCore(const char* digit, bool minus) {
 43     long long num = 0;
 44
 45     while (*digit != ‘\0‘) {
 46         if (*digit >= ‘0‘ && *digit <= ‘9‘) {
 47             int flag = minus ? -1 : 1;
 48             num = num * 10 + flag * (*digit - ‘0‘);
 49             //考虑溢出
 50             if ((!minus && num > 0x7FFFFFFF) //int所能表示的最大正整数
 51             || (minus && num < (signed int) 0x80000000)) { //int所能表示的最小负整数
 52                 num = 0;
 53                 break;
 54             }
 55
 56             digit++;
 57         } else {
 58             num = 0;
 59             break;
 60         }
 61     }
 62
 63     if (*digit == ‘\0‘) {
 64         g_nStatus = kValid;
 65     }
 66
 67     return num;
 68 }
 69
 70 // ====================测试代码====================
 71 void Test(char* string) {
 72     int result = StrToInt(string);
 73     if (result == 0 && g_nStatus == kInvalid)
 74         printf("the input %s is invalid.\n", string);
 75     else
 76         printf("number for %s is: %d.\n", string, result);
 77 }
 78
 79 int main(int argc, char** argv) {
 80     Test(NULL);
 81
 82     Test("");
 83
 84     Test("123");
 85
 86     Test("+123");
 87
 88     Test("-123");
 89
 90     Test("1a33");
 91
 92     Test("+0");
 93
 94     Test("-0");
 95
 96     //有效的最大正整数, 0x7FFFFFFF
 97     Test("+2147483647");
 98
 99     Test("-2147483647");
100
101     Test("+2147483648");
102
103     //有效的最小负整数, 0x80000000
104     Test("-2147483648");
105
106     Test("+2147483649");
107
108     Test("-2147483649");
109
110     Test("+");
111
112     Test("-");
113
114     return 0;
115 }
时间: 2024-12-31 07:26:54

JZ-C-49的相关文章

C#操作Flash动画

对于在C#开发的过程中没有接触过Flash相关开发的人员来说,没有系统的资料进行学习,那么这篇文档针对于初学者来说是很好的学习DEMO. 本文章中的DEMO实现了C#的COM控件库中本来就带有对flash进行播放的控件,只是需要对flash的相关操作进行了解即可,先看看实现的效果. 阅读目录 实现效果 配置Flash的运行环境 实现逻辑 C#操作Flash的关键参数解析 Demo源码包(VS2013进行实现) 总结 回到顶部 实现效果 回到顶部 配置Flash的运行环境 1.在VS中创建好一个w

什么值得买:一家论坛式导购网站的自我修养

什么值得买 的用户把这个网站亲切称为"色魔张大妈"(SMZDM演化而来),虽然这个昵称有些恶搞的成分,但这是一家我印象中这个时代为数不多的"正常"公司.它没有颠覆什么,但重新定义了什么是"值",并且改变了一大批人的消费习惯. 在电商领域,什么值得买从创立初始就在节奏与气质上特立独行,包括其至今都没有涉及"交易"环节.电商行业里,如果一家公司不擅长赶政策热点.赶创业故事热潮,很难在资本市场为自己谈到一个好价钱,没钱烧就没有资源支

[自制简单操作系统] 5、杂七杂八(高分辨率和键盘输入)

前言: >_<" 这几天正在研究一个好玩的,准备写<软硬结合第三篇——科班的还是可以修电脑的>,可是当前遇到个技术难点——WHDI,所以操作系统这里就慢了好大一节啦!但是以操作系统多任务的思路,感觉还是把这个优先级并不是太低的进程拿出来做一下吧!毕竟技术难点有时候需要灵感的哈~(不过有大神知道VGA接口的通信原理吗?求给个好一点的链接看看!).回到正题上来,这次学的东西有点杂,主要就是高分辨率和键盘输入相关~对于前者和汇编及硬件联系较多(具体可以查VBE Video El

矩阵乘法快速幂 codevs 1732 Fibonacci数列 2

1732 Fibonacci数列 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 在“1250 Fibonacci数列”中,我们求出了第n个Fibonacci数列的值.但是1250中,n<=109.现在,你的任务仍然是求出第n个Fibonacci数列的值,但是注意:n为整数,且1 <= n <= 100000000000000 输入描述 Input Description 输入有多组数据,每

NYOJ 49 开心的小明

开心的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N 元钱就行".今天一早小明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N 元.于是,他把每件物品规定了一个重要度,分为5 等:用整数1~5 表示,第5 等最重要.他还从因特网上查到了每件物品的价格(都是整数元).

Win32 汇编 - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

跳转指令分三类:一.无条件跳转: JMP;二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转);三.根据 EFLAGS 寄存器的标志位跳转, 这个太多了. 根据标志位跳转的指令: JE ;等于则跳转 JNE ;不等于则跳转 JZ ;为 0 则跳转 JNZ ;不为 0 则跳转 JS ;为负则跳转 JNS ;不为负则跳转 JC ;进位则跳转 JNC ;不进位则跳转 JO ;溢出则跳转 JNO ;不溢出则跳转 JA ;无符号大于则跳转 JNA

4-9 二叉树的遍历 (25分)

4-9 二叉树的遍历   (25分) 输出样例(对于图中给出的树): Inorder: D B E F A G H C I Preorder: A B D F E C G H I Postorder: D E F B H G I C A Levelorder: A B C D F G I E H 代码:(都是遍历的算法) 1 // 4-9 二叉树的遍历 2 // 3 // Created by Haoyu Guo on 04/02/2017. 4 // Copyright ? 2017 Haoy

49. 蛤蟆的数据结构笔记之四十九图的连通性问题

49. 蛤蟆的数据结构笔记之四十九图的连通性问题 本篇名言:"我们不得不饮食.睡眠.游惰.恋爱,也就是说,我们不得不接触生活中最甜蜜的事情:不过我们必须不屈服于这些事物 .....--约里奥?居里"     此篇就作为数据结构入门笔记的最后一篇吧. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47135259 设图G=(V,E)是一个无向图,G的一个连通分支是一个最大的连通子图,即一个连通分支是不包含在任何更大的

juniper的49个配置文件的存储路径

[email protected]% cd /config/  (0到3及rescure文件) [email protected]% cd /var/db/config/(4到49的相关文件) SNMP设置: [edit snmp] community cardinals {    authorization read-only;    clients {        10.210.14.0/24;    }} 链路端口端开后,设备会亮红灯,可以通过如下命令除掉红灯: root#set cha

Chapter7: question 49 - 50

49. 把字符串转换为整数 很多细节需要注意.(空格,符号,溢出等) Go: 8. String to Integer (atoi) 50. 树种两个结点的最低公共祖先 A. 若是二叉搜索树,直接与根结点对比. 若都大于根节点,则在友子树:若都小于根节点,则在左子树:若根节点介于两数之间,则根节点即为答案. B. 普通树,若是孩子节点有指向父节点的指针,则问题变为求两个链表的第一个公共结点. 如:37题. C. 普通树:思路1,若一个结点的子树同时包含两个结点,而它的任一孩子结点的子树却不能同时