int isnumber(const char* p)
{
int flag_e=0, flag_p=0, flag_m=1;
if (!*p) return 0;
for (; *p; p++)
switch (*p) {
case 'e':
case 'E':
if (flag_e) return 0;
flag_e=flag_m=1; break;
case '.':
if (flag_e||flag_p) return 0;
flag_p=1; break;
case '-':
if (!flag_m) return 0;
flag_m=0; break;
default:
if (!isdigit(*p))
return 0;
else {
flag_m=0;
if (flag_e) flag_e=2;
}
}
return flag_e!=1 && p[-1]!='-';
}