题解 | #表示数值的字符串#
表示数值的字符串
https://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8
class Solution { public: bool isNumeric(char c) { if (c >= '0' && c <= '9') { return true; } return false; } bool isNumeric(string str) { //空串 if (str.empty()) { return false; } //去掉前空格 int i = 0; for(i = 0;i < str.length();i++) { if (str[i] != ' ') { break; } } str = str.substr(i,str.length() -i); if (str.empty()) { return false; } //去掉后空格 for(i = str.length() - 1; i >= 0; i--) { if (str[i] != ' ') { break; } } str = str.substr(0,i + 1); if (str.empty()) { return false; } //去掉 + - 号 if (str[0] == '+' || str[0] == '-') { str = str.substr(1,str.length() - 1); if (str.empty()) { return false; } } //数字和'e','.'的处理 bool flag1 = false; bool flag2 = false; for(i = 0;i < str.length();i++) { //前后至少有一个的数字 if (str[i] == '.') { //'.'只能出现一次 以及 小数点后面不能有e if (flag1 || flag2) { return false; } flag1 = true; if (i >= 1 && isNumeric((char)str[i-1])) { continue; } if (i + 1 < str.length() && isNumeric((char)str[i + 1])) { continue; } return false; } //前后都要是数字(后面的数字可以带正负号) if (str[i] == 'e' || str[i] == 'E') { //'e'只能出现一次 if (flag2) { return false; } flag2 = true; //前面的数字可以是小数 if (i >= 1 && (isNumeric((char)str[i-1]) || str[i-1] == '.')) { //后面的数字可以带正负号 if (str[i + 1] == '-' || str[i + 1] == '+') { //跳过这个字符的检查 i++; } if(i + 1 < str.length() && isNumeric((char)str[i + 1])) { continue; } } return false; } //其他的只能是数字 if(!isNumeric((char)str[i])) { return false; } } return true; } };