/* 参考剑指offer,改动了一些小部分。 数值可以表示为 A[.[B]]e|E[C] 其中A 和C 可以带有正负号,B不能带有符号 A可以没有,B也可以没有,不过在'.'的情况下 在e|E ,B是必须有的,所以这就是在判断str[index]=='.' 和str[index]=='e'|| str[index]=='E'时是使用不同运算符的原因。 然后分解成两个函数小函数我觉得可读性强一点,毕竟代码给人看的,想看细节的同学 请移步剑指offer官方书籍。 */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @return bool布尔型 */ bool isNumeric(string str) { // write code here if(str.empty()) return false; size_t index=0; bool numeric=scanInteger(str,index); if(str[index]=='.'){ ++index; bool hasNumbers=scanUnsignedInteger(str,index); numeric=hasNumbers || numeric; } if(str[index]=='e'|| str[index]=='E'){ ++index; numeric=numeric && scanInteger(str,index); } return numeric && (index==str.size()); } bool scanInteger(string& str,size_t& index){ if(str[index]=='+'||str[index]=='-') ++index; return scanUnsignedInteger(str,index); } bool scanUnsignedInteger(string& str,size_t& index){ size_t begin=index; while(str[index]!='\0' && str[index]>='0'&& str[index]<='9') ++index; return index>begin; } };