题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
C++
class Solution {
public:
bool isNumeric(char* string)
{
int n=strlen(string);
for(int i=0;i<n;i++)
{
if((string[i]>='0' && string[i]<='9') || '.'==string[i] || '+'==string[i] || '-'==string[i] || 'e'==string[i] || 'E'==string[i])
{
continue;
}
else
{
return false;
}
}
int idx=-1;
for(int i=0;i<n;i++)
{
if('e'==string[i] || 'E'==string[i])
{
idx=i;
break;
}
}
vector<int> point_idx;
vector<int> symbol_idx;
for(int i=0;i<n;i++)
{
if('.'==string[i])
{
point_idx.push_back(i);
}
if('+'==string[i] || '-'==string[i])
{
symbol_idx.push_back(i);
}
}
if(-1==idx)
{
if(point_idx.size()>=2 || symbol_idx.size()>=2)
{
return false;
}
else
{
if(symbol_idx.size())
{
if(symbol_idx[0]!=0)
{
return false;
}
else
{
return true;
}
}
else
{
return true;
}
}
}
if(n-1==idx)
{
return false;
}
for(int i=idx+1;i<n;i++)
{
if(i==idx+1)
{
if('.'==string[i] || 'e'==string[i] || 'E'==string[i])
{
return false;
}
}
else
{
if(!(string[i]>='0' && string[i]<='9'))
{
return false;
}
}
}
int num_point=0;
for(int i=0;i<idx-1;i++)
{
if(0==i)
{
if('e'==string[i] || 'E'==string[i])
{
return false;
}
if('.'==string[i])
{
num_point++;
}
}
else
{
if('.'==string[i])
{
num_point++;
if(num_point>=2)
{
return false;
}
}
else
{
if(!(string[i]>='0' && string[i]<='9'))
{
return false;
}
}
}
}
return true;
}
};