leetcode 65. Valid Number

来源:互联网 发布:剑三花太捏脸数据 编辑:程序博客网 时间:2024/05/20 20:57

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;}


0 0