题目描述:
分析:我真的巨烦这种字符串验证和匹配的问题,麻烦的要死,到处都是边界,实话实说,这道题我是根据每个造成错误的测试用例修改写出来的,真的心累。。。。尤其是最后几个测试用例,那是一个一个改,每个测试用例都能发现我程序中的毛病
不多说了,上代码,注释和题解的优秀解法等明天再说吧,确实太晚了
class Solution {
public:
int strToInt(string str) {
bool firstblank=true;
bool ifhasfuhao=false;
bool firstzero=true;
int firstzeroindex=2147483647;
int firstfuhaoindex=2147483647;
int firstblankindex=2147483647;
bool ifhasshuzi=false;
char fuhao=' ';
string tempres;
for(int i=0;i<str.size();i++)
{
if(str[i]==' ')
{
if(ifhasshuzi) break;
if(firstblank)
{
continue;
}
else
break;
}
if((str[i]=='+'||str[i]=='-'))
{
if(ifhasshuzi) break;
if(!ifhasfuhao)
{
if(firstzeroindex<firstfuhaoindex)
return 0;
fuhao=str[i];
ifhasfuhao=true;
firstblank=false;
firstfuhaoindex=i;
continue;
}
else
break;
}
if(str[i]>='0'&&str[i]<='9')
{
ifhasshuzi=true;
if(str[i]=='0'&&firstzero)
{
firstzeroindex=i;
continue;
}
tempres+=str[i];
firstblank=false;
firstzero=false;
continue;
}
else
break;
}
// cout<<tempres<<endl;
if(tempres=="") return 0;
return converse(tempres,fuhao);
}
int converse(string str,char fuhao)
{
int start=0;
if(fuhao==' ')
fuhao='+';
int len=str.size();
if(len>10&&fuhao=='-')
return -2147483648;
else if(len>10)
return 2147483647;
unsigned long long int res=0;
unsigned long long int base=1;
for(int i=len-1;i>=0;i--)
{
char c=str[i];
int temp=c-'0';
res=res+temp*base;
base=base*10;
}
if(res>2147483648&&fuhao=='-')
return -2147483648;
if(res>2147483647&&fuhao=='+')
return 2147483647;
if(fuhao=='-')
return -1*res;
else
return res;
return 0;
}
};