CSDN_Marker 2022-05-28 15:15
浏览 54
已结题

提取字符串中的小数(小数点前无数字默认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

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 6月5日
    • 创建了问题 5月28日

    悬赏问题

    • ¥15 django5安装失败
    • ¥60 ios系统storm sniffer 写入http规则加密如何破解?
    • ¥15 Java与Hbase相关问题
    • ¥15 后缀 crn 游戏文件提取资源
    • ¥15 ANSYS分析简单钎焊问题
    • ¥20 bash代码推送不上去 git fetch origin master #失败了
    • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
    • ¥15 在centos7安装conda
    • ¥15 c#调用yolo3 dll文件获取的数据对不上
    • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译