/* [表示数值的字符串] [题目] 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。 [解析] 正确的形式[]表示可有可无/表示其中任一一个。 [sign]integer[.integer][e/E [sign] integer] 理清思路,每一种情况考虑到位。 */ #include <iostream> #include <vector> #include <algorithm> using namespace std; class Solution{ public: bool isNumeric(char* string){ if(string == NULL || *string=='/0') return false; //cout << string << endl; char* pCur = string; // sign if(*pCur == '-' || *pCur == '+'){ pCur++; if(*pCur == '/0') return false; } //cout << "finish sign: " << *pCur << endl; // integral part skipInteger(pCur); if(*pCur == '/0') return true; //cout << "finish integral part: " << *pCur << endl; // fractional part if(*pCur == '.'){ pCur++; if(*pCur == '/0') return false; skipInteger(pCur); } //cout << "finish fractional part: " << *pCur << endl; // exponent part if(*pCur == 'e' || *pCur == 'E'){ pCur++; if(*pCur == '/0') return false; // sign if(*pCur == '-' || *pCur == '+'){ pCur++; if(*pCur == '/0') return false; } // integer skipInteger(pCur); } //cout << "finish exponent part: " << *pCur << endl; return *pCur == '/0'; } void skipInteger(char* &pCur){ while(*pCur != '/0' && isInteger(*pCur)){ pCur++; } } bool isInteger(char ch){ return ch>='0' && ch<='9'; } }; int main() { char* str="+100.123E-1"; cout << Solution().isNumeric(str) << endl; return 0; }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/15302.html