来个朋友看看叭。
问题背景:
这是我们挑战的一中优化代码,在更一般的情况下提取出字符串里面数字
问题介绍:
这里的数字包括
小数,如果小数点的前面是非数字就按为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++));
}
}
}