提取字符串中的小数(小数点前无数字默认0.xx)指数,带正负

来个朋友看看叭。
问题背景:
这是我们挑战的一中优化代码,在更一般的情况下提取出字符串里面数字
问题介绍:
这里的数字包括
小数,如果小数点的前面是非数字就按为0,例如:..36,提取后就是0.36
指数,大E小e都要能识别出来
输出结果要有正负,正号可省略,如果是浮点数要按%g的格式输出
我的情况:
我写3.4天了,我试过许多办法,麻烦还不对
下面是我的最后一次尝试的代码,没什么用,就表示一下我努力过😔_
我的问题:
只要是c语言写的(目前就会这一种语言),能运算出正确答案就行,当然越简单越好 ^-^

#include<stdio.h>
#include<string.h>
int isdig(char *p)
{
    if(*p>='0' || *p<='9') return 1;
    else return 0;
}
//是数字(或者为('.'的后面一位是数字))就应读尽读 
//起始地址:char *flag 
// 数字-->继续读
// .-->此后第一个读入,其它不读并停止
// **读入条件:判断后面是否为数字?读入:结束 
// e(E)-->第一个读入,其他不读入并停止 
// **读入条件:判断后面是否为数字?读入:结束
//符号位的判断:数字开头flag前面以为是否为'-' 
int main()
{
    int len,i,j;
    char a[50],*flag,*p;
    gets(a);
    len=strlen(a);
    for(i=0;i<len;i++)
    {
        if(isdig(p+i))
        {
            i++;
            while(isdig(p+i++));
            if(*(p+i)=='.' && isdig(p+i+1) && f1=0) f1=1,while(isdig(p+1+i++));
            else if((*(p+i)=='e' || *(p+i)=='E') && isdig(p+i+1) && f2=0) 
            f2=1,while(isdig(p+1+i++));
        }
        change(flag,p);
        if(*(p+i)=='.' && isdig(p+i+1))
        {
            i++;
            while(isdig(p+i++));
            if((*(p+i)=='e' || *(p+i)=='E') && isdig(p+i+1) && f2=0) 
            f2=1,while(isdig(p+1+i++));
        }
    }
} 

img