编辑代码

#include <stdio.h>

int main()
{
    char str[10000];
    int sum_len=0,len=0,max_len=0;
    int al=-1,ah=-1,max_al=-1,max_ah=-1;
    int i=0,j=0;
    int label_1=0,label_2=0;

    gets(str);
    sum_len=strlen(str);

    for(i=0;i<=sum_len;i++)
    {
        if( (str[i]>=48 && str[i]<=57) || str[i]==46 || str[i]==45 || str[i]==43)//可能是数字串
        {
            if(str[i]==46)//小数点
            {
                if((str[i-1]>=48 && str[i-1]<=57) && (str[i+1]>=48 && str[i+1]<=57)  && label_1==0)//两边是数字
                {
                    label_1=1;
                    if(len==0)//是数字串 且 为数字串开头,记录该数字串的首位地址
                        al=i;
                    len++;
                }
                else
                {
                    if(len>0)//如果前面有数字串
                    {
                        ah=i-1;//记录该数字串的末尾地址
                        if(len>=max_len)
                        {
                            max_len=len;//更新最大长度
                            max_al=al;//更新最长数字串首位地址
                            max_ah=ah;//更新最长数字串末尾地址                        
                        }
                    }
                    len=0;
                }
            }

            if(str[i]==45 || str[i]==43)//加减号
            {
                if(!(str[i-1]>=48 && str[i-1]<=57) && (str[i+1]>=48 && str[i+1]<=57) && label_2==0)//前面不是数字,后面是数字
                {
                    label_2=1;
                    if(len==0)//是数字串 且 为数字串开头,记录该数字串的首位地址
                        al=i;
                    len++;
                }
                else
                {
                    if(len>0)//如果前面有数字串
                    {
                        ah=i-1;//记录该数字串的末尾地址
                        if(len>=max_len)
                        {
                            max_len=len;//更新最大长度
                            max_al=al;//更新最长数字串首位地址
                            max_ah=ah;//更新最长数字串末尾地址                        
                        }
                    }
                    len=0;
                }
            }

            if(str[i]>=48 && str[i]<=57)//读取到数字
            {
                if(len==0)//是数字串 且 为数字串开头,记录该数字串的首位地址
                    al=i;
                len++;
            }
        }
        else//不可能是数字串
        {
            if(len>0)//如果前面有数字串
            {
                ah=i-1;//记录该数字串的末尾地址
                if(len>=max_len)
                {
                    max_len=len;//更新最大长度
                    max_al=al;//更新最长数字串首位地址
                    max_ah=ah;//更新最长数字串末尾地址                        
                }
            }
            len=0;
        }
    }

    for(i=max_al;i<=max_ah;i++)
    {
        printf("%c",str[i]);
    }
}