您的位置:首页 > 其它

leetcode 65. Valid Number

2016-04-16 11:58 302 查看
Validate if a given string is numeric.

Some examples:
"0"
 => 
true

" 0.1 "
 => 
true

"abc"
 => 
false

"1 a"
 => 
false

"2e10"
 => 
true


Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.
这题虽没啥难的但要考虑的情况太多,太琐碎,所以提交了很多次,最后几乎是提交一次按错误的情况修改代码,简直要崩溃。所以建议事先收集好所有信息,在vs编辑器里定义一个数字,然后看是不是valid,这样可以避免很多错误提交。
最后写代码要耐心。

bool isNumber(char* s) {
//double c = 5e-5;
//int p = +-+-0.;
//double c = 3.e1;
//double cc = -+-+1.3e4;
//double v = 1.4+1e2;
if (s == NULL)
return false;
int len = strlen(s);
if (s[0] != '.'&&s[0] != ' '&&s[0] != '+'
&&s[0] != '-' && !(s[0] - '0' >= 0 && s[0] - '9' <= 0))
return false;
int k = 0;
while (k < len&&s[k] == ' ')
k++;
if (k == len)
return false;
int jj=k;
if (s[k] == '+' || s[k] == '-')
{
jj = k;
while (jj < len&&s[jj] == '+' || s[jj] == '-')
jj++;
if (jj == len)
return false;
for (int i = k; i < jj - 1; i++)
if (s[i] == s[i + 1])
return false;
k = jj;
}
int uu = len - 1;
while (uu >= 0 && s[uu] == ' ')
uu--;
for (int iii = k; iii <= uu; iii++)
if (s[iii] == ' ')
return false;
int dotpos = -1;
if (s[k] == '.')
{
int yy = k + 1;
while (yy < len&&s[yy] == ' ')
yy++;
if (yy == len)
return false;
dotpos = k;
for (int i = k + 1; i < len; i++)
if (s[i] == '.')
return false;
}
else
{
for (int i = k + 1; i < len; i++)
if (s[i] == '.')
{
if (dotpos >= 0)
return false;
dotpos = i;
}
}
if (dotpos >= 0)
{
if (dotpos == len - 1)
{
if (!(len-2>=0&&(s[len-2] - '0' >= 0 && s[len-2] - '9' <= 0)))
return false;
for (int i = jj; i < len - 1; i++)
if (s[i] == 'e'||s[i]=='+'||s[i]=='-')
return false;
return true;
}
for (int i = k; i < dotpos; i++)
if (!(s[i] - '0' >= 0 && s[i] - '9' <= 0))
return false;
int ii;
for (ii = dotpos + 1; ii < len; ii++)
if (s[ii] != ' ')
break;
if (ii == len)
return true;
k = dotpos + 1;
}
if (k == len)
return false;
if (!(s[k] - '0' >= 0 && s[k] - '9' <= 0||s[k]=='e'))
return false;
while (k < len && (s[k] - '0' >= 0 && s[k] - '9' <= 0))
k++;
if (k == len)
return true;
int j;
for (j = k; j < len; j++)
if (s[j] != ' ')
break;
if (j == len)
return true;
if (s[k] != 'e')
return false;
if (k - 1 >= 0 && s[k - 1] == '.')
{
if (!(k - 2 >= 0 && s[k - 2] - '0' >= 0 && s[k - 2] - '0' <= 9))
return false;
}
bool fl = false;
for (int i = 0; i < k; i++)
if (s[i] - '0' >= 0 && s[i] - '0' <= 9)
{
fl = true;
break;
}
if (!fl)
return false;
if (k == len - 1)
return false;
k++;
if (s[k] == '+' || s[k] == '-')
k++;
if (k == len)
return false;
if (!(s[k] - '0' >= 0 && s[k] - '9' <= 0))
return false;
int i;
for (i = k; i < len; i++)
if (!(s[i] - '0' >= 0 && s[i] - '9' <= 0))
break;
if (i == len)
return true;
for (; i < len; i++)
if (s[i] != ' ')
return false;
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: