题解 | #表示数值的字符串#
表示数值的字符串
https://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8
class Solution { public: int id = 0; // 全局遍历方式 // 查询是否为+-号,若是,后一位必然为整数才符合数值 bool has_symhol(string str) { if(id < str.size() && (str[id] == '-' || str[id] == '+' )) id++; return integer(str); } // 判断后一位是否为整数,若一直是,则不断更新id的数值 bool integer(string str){ int tmp = id; while(id < str.size() &&(str[id] >= '0' && str[id] <= '9')) id++; return id > tmp; } bool isNumeric(string str) { // write code here // 去除开始空格 if (str.empty()) return false; while (str[id] == ' ' && id < str.size()) { // 注意迭代边界 id++; } int n = str.size() - 1; // 记得包含最后一个隐藏字段'\n' while (str[n] == ' '&& n >= 0) { // 注意迭代边界 n--; } std::cout << " str size : " << str.size() << " " << id << " " << n << std::endl; if(id > n) return false; // 全是空格时,则非数值字符串 // flag记录当前走过的字符符合数值情况 bool flag = has_symhol(str); // 检查一下 + - 存在情况 // 若为带符号的数值,则判断过程中id已更新到下一个,至少下次遍历至id+2 std::cout << flag << id << std::endl; // 如有. if(id <= n && str[id] == '.'){ id++; flag = integer(str) || flag; // 若为带符号数值,则小数点后可为E? 是的,-1.E4表示-40000 // . 后一位只能跟数字则才为true } std::cout << flag << id << std::endl; // 若有e,后面一位到最后只能为数字才符合科学计数法 if(id <= n && (str[id] == 'e' || str[id] == 'E')) { id++; flag = has_symhol(str) && flag; } std::cout << flag << id << std::endl; return flag&&(id == n+1); // id == n +1 表示好好遍历到最后一个位置了。记得别漏最后‘\n’ } };
挤挤刷刷! 文章被收录于专栏
记录coding过程