[Leetcode]-String to Integer (atoi)
2015-07-01 14:02
393 查看
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); }
相关文章推荐
- accept and content-type http headers
- HDU 1394 Minimum Inversion Number【 树状数组 】
- CSP编程基础--CryptAPI基本函数含参介绍
- shell脚本echo的换行操作
- [js][有趣的问题]add(2)(3)(7)
- ICD3 Header-6接插件引脚定义
- 程序运行时的内存分配
- 微秒级延时
- The C Programming Language 第一章导言 读书笔记
- 选对域名很重要
- 设计模式六大原则(2):里氏替换原则
- sql知识归纳2
- salesforce本地开发工具介绍
- 转-WebView loadData与loadDataWithBaseURL用法、区别
- swift 值得学习的项目
- Spring MVC数据转换
- No view found for id 0x7f080005 (id/view_pager) for fragment
- 新一代UEFI BIOS “CSM”对安装Windows的影响(11)
- 处理 过滤高频数据的微小波动
- 内核优化转王壮~~