题解 | #表示数值的字符串#
表示数值的字符串
https://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8
#include <type_traits> class Solution { public: bool isNumeric(string str) { for (int i = 0; i < str.size(); i++){ if (str[i] == 'e' || str[i] == 'E') return science(str, i); } for (auto s : str){ if (s == '.') return xiaoshu(str); } return zhengshu(str); } bool science(string str, int sci_index){ string pre = str.substr(0 , sci_index); string post = str.substr(sci_index + 1 , str.size() - sci_index - 1); return (zhengshu(pre) || xiaoshu(pre)) && zhengshu(post); } bool zhengshu(string str){ bool symbol_index = false; bool num_index = false; for (auto s : str){ if (s == '+' || s == '-'){ if (symbol_index || num_index) return false; else symbol_index = true; } else{ if (s >= '0' && s <= '9') num_index = true; else if (s != ' ') return false; } } return num_index; } bool xiaoshu(string str){ int num = 0; for (auto s : str){ if (s == '.') num++; } if (num != 1) return false; int k = 0; while (str[k] != '.'){ k++; } bool num_index1 = false; bool num_index2 = false; bool symbol_index = false; for (int i = 0; i < k; i++){ if (str[i] == '+' || str[i] == '-'){ if (symbol_index || num_index1) return false; else symbol_index = true; } else{ if (str[i] >= '0' && str[i] <= '9') num_index1 = true; else if (str[i] != ' ') return false; } } for (int i = k + 1; i < str.size(); i++){ if (str[i] >= '0' && str[i] <= '9') num_index2 = true; else if (str[i] != ' ') return false; } return num_index1 || num_index2; } };