该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我想做个计算器程序,因此需要用到能从字符串中提取几个float的函数。
程序如下:
#include "stdio.h"
#include "ctype.h"
#include "stdlib.h"
#include "stdbool.h"
int check(char *s);//检测s是否符合运算式并去除空格:Y(1)N(0)
bool isfloat(char ch);//检测ch是否为组成浮点数的数字和点
void tofloat(char *s,float *flo);//将字符串s中的浮点数提取出来放入浮点数组flo中
int main()
{
char source[100];
float arr[20];
int i;
gets(source);
while(check(source)==0)
{
puts("Enter error.Please enter again:");
gets(source);
}
puts(source);
tofloat(source,arr);
i=0;
while(*(arr+i)!=0)
{
printf("%.1f\n",*(arr+i));
i++;
}
return 0;
}
int check(char *s)
{
char *p;
int bracket=0;
int icheck=1;
p=s;
while(*p!='\0')
{
if(isdigit(*p)==0&&*p!=' '&&*p!='+'&&*p!='-'&&*p!='*'&&*p!='/'
&&*p!='('&&*p!=')'&&*p!='.')
icheck=0;
if(*p=='(')bracket++;
if(*p==')')bracket--;
if(bracket<0)icheck=0;
p++;
}
if(bracket!=0)icheck=0;
if(icheck==0)
{
puts("Enter error!");
return 0;
}
while(*s!='\0')
{
if(*s==' ')
{
p=s;
while(*p!='\0')
{
*p=*(p+1);
p++;
}
s--;
}
s++;
}
return 1;
}
bool isfloat(char ch)
{
if(isdigit(ch)==1||ch=='.')
return true;
else
return false;
}
void tofloat(char *s,float *f)
{
int i,j;
char p[20][20];
while(*s!='\0')
{
j=0;
if(isfloat(*(s+j)))
{
*(*(p+i)+j)=*(s+j);
j++;
while(isfloat(*(s+j)))
{
*(*(p+i)+j)=*(s+j);
j++;
}
*(*(p+i)+j)='\0';
*(f+i)=atof(*(p+i));
i++;
}
s+=1+j;
}
}