String to Integer (atoi)
2015-11-19 15:37
447 查看
这题写的好惨啊,各种情况
1、丢弃前面空白和数字后面东西
2、数字是会连续输入的或者是和符号一起输出的,中间有其他的字符都会视为无效,数字前有其他字符也会视为无效。
3、0777视为777的,注意整数溢出。
1、丢弃前面空白和数字后面东西
2、数字是会连续输入的或者是和符号一起输出的,中间有其他的字符都会视为无效,数字前有其他字符也会视为无效。
3、0777视为777的,注意整数溢出。
class Solution { public: int myAtoi(string str) { if(str.empty()) return 0; string::iterator first=str.begin(),end=str.end(); int n=0,op_tag=0,num_tag=0,space_tag=0; long long max=2147483647,num=0; char op='+'; while(first!=end) { while(*first==' '){first++;space_tag=1;} if(*first=='+'||*first=='-' ) { if(op_tag==0) { op=*first; op_tag=1; first++; } else return 0; } if((first != end) &&isdigit(*first)) { while((first != end) && isdigit(*first)) { n=*first-'0'; num=num*10+n; first++; num_tag=1; if(num > max)break; } } else break; if(num_tag==1||space_tag==1||op_tag==1) break; first++; } if(op=='-') { if(num >(max+1))num =-(max+1); else num=-num; } else if(op== '+') { if(num>max) num=max; } return num; } };
如果把指针改为下标会简练一些,下面是网上的思路
int atoi(const char *str) { int sign = 1, base = 0, i = 0; while (str[i] == ' ') { i++; } if (str[i] == '-' || str[i] == '+') { sign = 1 - 2 * (str[i++] == '-'); } while (str[i] >= '0' && str[i] <= '9') { if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - '0' > 7)) { if (sign == 1) return INT_MAX; else return INT_MIN; } base = 10 * base + (str[i++] - '0'); } return base * sign; }
相关文章推荐
- AD多通道采集调试
- gdb调试利器
- 打印日志 Log
- js中与Java代码及ajax的执行顺序问题
- Permutations—回溯法求解
- ThinkPHP 静态页缓存
- python---raw_input()和input()输入区别
- 关于正则表达式里面的一个重要知识点
- SPServer : 一个基于线程池(包括HAHS和LF)的高并发
- poj--1094
- 谈”句柄泄漏”
- c++虚函数实现机制及内存模型
- 学习总结
- Oracle的4类数据字典
- Ansible Variable
- 简单分析C语言中指针数组与数组指针的区别
- Remove Element - Leetcode
- html控件隐藏几种方法,占位隐藏
- 由一次程序崩溃引起的对new表达式的再次学习
- 蜂鸣器使用