首页 > 编程知识 正文

牛客网刷题,牛客网剑指offer

时间:2023-05-05 16:18:51 阅读:201430 作者:4210

题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。


class Solution {public: //先找一遍看是否有E,如果有就把字符串分成两段来判断 //第一段检查是否是一个浮点数,第二段检查是否是整型 //检查浮点数时一旦找到小数点就又可以转换成检查 //小数点后半段时候是整型,然后检查每个数值前先检查 //第一位是否有正负号,有的话跳过一位 bool isNumeric(char* string) { if (string == nullptr) return false; int len = strlen(string); if (len == 0) return false; int epos = -1; for (int i = 0; i < len; ++i) { if (string[i] == 'e' || string[i] == 'E') { epos = i; break; } } if (epos > 0) { int start1 = 0, end1 = epos-1, start2 = epos+1, end2 = len-1; if (start1 >= len || start2 >= len) return false; if (string[start1] == '+' || string[start1] == '-') ++start1; if (string[start2] == '+' || string[start2] == '-') ++start2; return isDouble(string, start1, end1) && isInt(string, start2, end2); } else { int start = 0, end = len-1; if (string[start] == '+' || string[start] == '-') ++start; return isDouble(string, start, end); } }private: bool isDouble(char* str, int start, int end) { if (start < 0 || end < 0 || start > end) return false; for (int i = start; i <= end; ++i) { if (str[i] == '.') return isInt(str, i + 1, end); else if (str[i] < '0' || str[i] > '9') return false; } return true; } bool isInt(char* str, int start, int end) { if (start < 0 || end < 0 || start > end) return false; for (int i = start; i <= end; ++i) { if (str[i] < '0' || str[i] > '9') return false; } return true; }};

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。