这个题判断一个数是否为数,不过输入样例太扯。。。或许是自己太水,我的定义和样例的定义不一样,改了好久,难怪这个题的AC率这么低。
class Solution { public: bool isNumber(const char *s) { string str = ""; int len = strlen(s); int i = 0; for(;i < len;i++) { if(s[i] == ' ')continue; else break; } for(;i < len;i++) { str.push_back(s[i]); } for(int i = str.length()-1;i >= 0;i--) { if(str[i] == ' ') { str.erase(i); } else break; } return isNumberString(str); } private: bool isNumberString(string s) { //是否有正负号 //是否带小数点 //是否含e //是否有前置0 int len = s.length(); if(len <= 0)return false; if(len == 1) { if(s[0] < '0' || s[0] > '9')return false; else return true; } int start = 0; if(s[0] == '+' || s[0] == '-') { start = 1;<br /> } bool isZeroAllowed = true; bool isPotAllowed = false; bool isEallowed = false;</p> <pre><code> bool once = true; if(s[start] == '.') { if(len &gt;= start + 2) { if(s[start + 1] &gt;= '0' &amp;&amp; s[start + 1] &lt;= '9') { isZeroAllowed = true; isPotAllowed = false; isEallowed = true; once = false; start = start + 2; } else return false; } else return false; } for(int i = start;i &lt; len;i++) { if(s[i] == '.' &amp;&amp; isPotAllowed == false) { return false; } if(s[i] == '.' &amp;&amp; isPotAllowed == true) { isPotAllowed = false; continue; } if(s[i] == 'e' &amp;&amp; isEallowed == false) { return false; } if(s[i] == 'e' &amp;&amp; isEallowed == true) { isEallowed = false; isPotAllowed = false; once = false; if(i + 1 &gt;= len)return false; if(s[i+1] == '-' || s[i+1] == '+') { if(i+2 &gt;= len)return false; if(s[i+2] &lt; '0' || s[i+2] &gt; '9')return false; i+=2; continue; } if(s[i+1] &lt; '0' || s[i+1] &gt; '9')return false; continue; } if(s[i] &gt;= '0' &amp;&amp; s[i] &lt;= '9') { if(once == true) { isZeroAllowed = true; isPotAllowed = true; isEallowed = true; once = false; } continue; } return false; } return true; } </code></pre> <p>};