字符串转换到数字,我觉得这种题目就是坑爹的,注意各种临界情况!!
无语的麻烦!!
尤其是leetcode网站总显示服务器忙,还要等一会才有反应告诉我这不对。
看july博客的程序员编程艺术,专门有讲这个的,我还是去做了==
class Solution {
public:
int atoi(const char *s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int len=strlen(s);
long long num=0;
bool sign=true;
int sign_num=0;
bool use_e=false;
int space_idx=-1;
bool is_num=true;
bool num_change=false;
int e=0;
bool e_sign=true;
for(int i=0;i<len;i++)
{
if(s[i]==' ')
{
if(num_change) break;
if(space_idx==-1)
{
space_idx=i;
}
else
{
if(space_idx+1!=i)break;
else space_idx=i;
}
}
else if(s[i]=='-')
{
if(use_e)
{
e_sign=false;
}
else
{
sign=false;
sign_num++;
}
}
else if(s[i]=='+')
{
if(use_e)
{
e_sign=true;
}
else
{
sign=true;
sign_num++;
}
}
else if(s[i]=='e') use_e=true;
else if(s[i]>='0' && s[i]<='9')
{
if(space_idx!=-1 && num!=0)break;
else space_idx=-1;
num_change=true;
if(use_e)
{e=e*10+(s[i]-'0');}
else
{
num=num*10+(s[i]-'0');
}
}
else
{
is_num=false;
break;
}
}
if(sign==false) num=-num;
if(sign_num>1) return 0;
if(e_sign==false) e=-e;
//if(use_e) num*=pow(10,e);
if(num>=INT_MAX) num=INT_MAX;
else if(num<=INT_MIN) num=INT_MIN;
return num;
}
};