String to Integer (atoi)
2015-09-07 20:47
295 查看
Implement 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.
这个问题上手是比较容易的,就是把字符串转化成int类型的数字。但在实现期间,确实有很多情况需要考虑。正负号,非数字的字符,空字符等。而且数字字符间也存在可能不连续的现象,在题目中,数字之后如果出现其他字符,就停止遍历了。如果出现“+-”则返回0.最后就是要注意所谓了的溢出问题,INT_MAX和INT_MIN,溢出的话就返回边界值。
class Solution { public: int myAtoi(string str) { if(str.size()==0) return 0; //空串直接返回零 int i=0; for(i;i<str.size();i++){ //去掉开头的空字符 if(str[i]!=' ') break; } str=str.substr(i,str.size()-i); int flag=1; long long result=0; if(str[0]=='-'){ //判断正负号 flag=-1; str=str.substr(1,str.size()-1); } else if(str[0]=='+'){ str=str.substr(1,str.size()-1); } if(!isdigit(str[0])){ //下一个字符如果还是符号的话返回0 return 0; } for(int i=0;i<str.size();i++){ //转化过程 if(isdigit(str[i])){ int t=str[i]-'0'; result=result*10+t; if(result>INT_MAX){ //如果结果已经超过INT的范围,就可以结束遍历了 break; } } else{ //碰到非数字的字符就不再继续遍历 break; } } cout<<str<<endl; cout<<result<<endl; cout<<flag<<endl; if(flag==1&&result>INT_MAX) return INT_MAX; else if(flag==-1&&-result<INT_MIN) return INT_MIN; else return (int)flag*result; } };
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- android上改变listView的选中颜色
- String.intern
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- PostgreSQL ERROR: invalid escape string 解决办法
- 浅谈C++中的string 类型占几个字节
- 标准C++类string的Copy-On-Write技术
- C++实现string存取二进制数据的方法
- C#中string和StingBuilder内存中的区别实例分析
- PHP STRING 陷阱原理说明
- c#中 String和string的区别介绍
- C#实现的图片、string相互转换类分享
- asp.net String.IsNullOrEmpty 方法
- JavaScript中字符串(string)转json的2种方法
- C#中string用法实例详解
- C#中的DataSet、string、DataTable、对象转换成Json的实现代码
- JavaScript中的object转换成number或string规则介绍