- 题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
- 思路:
- 字符串处理的题目,考虑到各种意外情况
- 小数点不能出现两次
- 不能出现两个e
- e不能作为最后一个字符
- e不能在小数点之前,e可以在小数点之后
- +-没有出现在首字符,出现在字符串中间,那前一个一定是e或者E
- 字符串处理的题目,考虑到各种意外情况
- 启发或者坑:
- 最早做这个题目的时候,没有对e有着清楚的认知,所以debug一段时间,后来看了discuss之后get到了e的要求
- 代码:
class Solution { public: bool isNumeric(char* string) { bool hasPoint = false; // 小数点不能出现两次 bool hasE = false; //不能出现两个e //考虑多种情况,字符串只能是0-9,e,E,+,-,. for (int i = 0 ; i < strlen(string); i++) { if (!isRightChar(string[i])) return false; if (string[i] == 'e' || string[i] == 'E') { //e后面必须跟东西,比如+,比如数字,比如- if (i == strlen(string)-1) return false; //一个表达式只能有一个e if (hasE) return false; hasE = true; } if (string[i] == '+') { if (i != 0) { if (string[i-1] != 'E' && string[i-1] !='e') return false; } } if (string[i] == '-') { if (i != 0) { if (string[i-1] != 'E' && string[i-1] !='e') return false; } } if (string[i] == '.') { if (hasPoint) return false; //如果点出现2次,返回false //如果e在点之前,也返回false if (hasE) return false; hasPoint = true; } } return true; } bool isRightChar(char c) { if (c >= '0' && c <= '9') return true; if (c == 'e' || c == 'E' || c == '+' || c == '-' || c == '.') return true; return false; } };
剑指offer 50.表示数值的字符串
猜你喜欢
转载自blog.csdn.net/Alexia23/article/details/104093550
今日推荐
周排行