[Leetcode]-String to Integer (atoi)
2015-12-19 18:09
405 查看
mplement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
Update (2015-02-10):
The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button to reset your code definition.
题目:字串转整数
注意:细节部分非常多,须要考虑非常多情况
1、int溢出推断
2、正负号,详细情况见main函数中
3、含有空格的情况
结果:4ms
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
Update (2015-02-10):
The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button to reset your code definition.
题目:字串转整数
注意:细节部分非常多,须要考虑非常多情况
1、int溢出推断
2、正负号,详细情况见main函数中
3、含有空格的情况
结果:4ms
#include <stdlib.h> #include <stdio.h> #include <math.h> #include <limits.h> int myAtoi(char* str) { //"NULL" "000234" "+23" "-34" "+-34" " 010" if(NULL == str ) return 0; int sum = 0.0; int f = 0; int DIV = INT_MAX/10; while('\0' != *str) { if(*str == '+') { str++; if(*str < '0' || *str > '9') return 0; else f = 0; } if(*str == '-') { str++; if(*str < '0' || *str > '9') return 0; else f = 1; } if(*str >= '0' && *str<= '9' ) { if(sum > DIV && f == 0) return INT_MAX; if(sum > DIV && f == 1) return -INT_MAX-1; sum = sum * 10.0; if(INT_MAX - *str + '0' < sum && f == 0) return INT_MAX; if((INT_MAX - (*str - '0') < sum ) && (f == 1)) return -INT_MAX-1; sum = sum + *str - '0'; str++; if(*str == '\0') break; else if(*str < '0' || *str > '9') break; } else { if(*str >= 'a' && *str <= 'z' ) break; str++; } } if(f) sum = -sum; return sum; } int main() { char *str = "0034"; int r = myAtoi(str); printf("myAtoi str0 is : %d\n",r); char *str1 = "00"; int r1 = myAtoi(str1); printf("myAtoi str1 is : %d\n",r1); char *str2 = "+23"; int r2 = myAtoi(str2); printf("myAtoi str2 is : %d\n",r2); char *str3 = "-2345"; int r3 = myAtoi(str3); printf("myAtoi str3 is : %d\n",r3); char *str4 = "+-23"; int r4 = myAtoi(str4); printf("myAtoi str4 is : %d\n",r4);// expected 0 char *str5 = " 010"; int r5 = myAtoi(str5); printf("myAtoi str5 is : %d\n",r5); char *str6 = " +0104"; int r6 = myAtoi(str6); printf("myAtoi str6 is : %d\n",r6); char *str7 = " -0187"; int r7 = myAtoi(str7); printf("myAtoi str7 is : %d\n",r7);// expected -187 char *str8 = " -018a567"; int r8 = myAtoi(str8); printf("myAtoi str8 is : %d\n",r8); // expected -18 char *str9 = "2147483648"; int r9 = myAtoi(str9); printf("myAtoi str9 is : %d\n",r9); // expected 2147483647 因为越界,仅仅取最大 char *str10 = "-2147483649"; int r10 = myAtoi(str10); printf("myAtoi str10 is : %d\n",r10); // expected -2147483648 char *str11 = "- 204"; int r11 = myAtoi(str11); printf("myAtoi str11 is : %d\n",r11); // expected 0 char *str12 = "b3424242"; int r12 = myAtoi(str12); printf("myAtoi str12 is : %d\n",r12); // expected 0 while(0); }
相关文章推荐
- Unicode与JavaScript详解
- 行内元素和块级元素
- 实战c++中的vector系列--C++11对vector成员函数的扩展(cbegin()、cend()、crbegin()、crend()、emplace()、data())
- 实战c++中的vector系列--C++11对vector成员函数的扩展(cbegin()、cend()、crbegin()、crend()、emplace()、data())
- python 中的list 定位下标可以用负数
- Oracle 11.2 单实例连接ASM时需要注意的事项以及问题处理
- [Java学习] Java 读取汉字全拼简写
- 在Openstack Liberty版本里实现Auto Scale
- currency 过滤器
- MongoDB使用小结:一些不常见的经验分享
- mysql5.6自带工具集(一)
- ubuntu 15.10 安装Wine1.7 解决依赖
- eclipse打jar包步骤
- 《avascript 高级程序设计(第三版)》 ---第三章 基本概念2
- eclipse打jar包步骤
- eclipse打jar包步骤
- 磁盘分区及文件系统管理、磁盘分区机制及文件查找机制
- 【APUE】6、孤儿进程组
- 期末总结
- Properties类读写.properties配置文件