将字符串转换,浮动(不ATOF)用C [英] Converting string, to float (without atof) in C

查看:125
本文介绍了将字符串转换,浮动(不ATOF)用C的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我设计了一个将字符串转换成浮动的功能。
例如45.5= 45.5

我有这这么远。但它似乎并没有工作。请记住,我们不能使用任何C库函数一样的atoi,ATOF甚至战俘对这一问题。

  INT str2float(字符* S)
{
    INT NUM = 0;
    INT DEC = 0;
    双I = 1.0;
    诠释了TEN = 1;
    / *****添加你的code HERE ***** /    为(;!* S ='\\ 0'; S ++)
    {
        如果(* S =='。'){
            对于(* S ='\\ 0';!小号++){
                DEC =(月* CONT)+(* S - '0');
                我++;
            }
        }其他{
            NUM =(NUM * CONT)+(* S - '0');
        }    }
    (!; I = 0;我 - )为{
        10 * = 10;
    }
    DEC = DEC /(TEN);
    的printf(%D,DEC);
    NUM + =分解;
    返回NUM;
}


解决方案

下面是我的尝试:

 浮动STOF(为const char * S){
  浮苏亚雷斯= 0,实际上= 1;
  如果(* S ==' - '){
    小号++;
    事实上= -1;
  };
  对(INT point_seen = 0; * S; S ++){
    如果(* S =='。'){
      point_seen = 1;
      继续;
    };
    INT D = * S - '0';
    如果(d取代; = 0&放大器;和D&下; = 9){
      如果(point_seen)事实上/ = 10.0f;
      苏亚雷斯=苏亚雷斯* 10.0f +(浮点)D;
    };
  };
  返回苏亚雷斯*事实;
};

I'm designing a function that will convert a string into a float. e.g. "45.5" = 45.5

I have this so far. But it doesn't seem to work. Keep in mind, we cannot use any C library functions like atoi, atof or even pow for that matter.

int str2float( char *s )
{
    int num = 0;
    int dec = 0;
    double i = 1.0;
    int ten = 1;
    /***** ADD YOUR CODE HERE *****/

    for(; *s != '\0'; s++)
    {
        if (*s == '.'){
            for(; *s != '\0'; s++){
                dec = (dec * CONT) + (*s - '0');
                i++;
            }
        }else{
            num = (num * CONT) + (*s - '0');
        }

    }
    for(;i!=0;i--){
        ten *= 10;
    }
    dec = dec / (ten);
    printf("%d", dec);
    num += dec;
    return num;  
}

解决方案

Here is my try:

float stof(const char* s){
  float rez = 0, fact = 1;
  if (*s == '-'){
    s++;
    fact = -1;
  };
  for (int point_seen = 0; *s; s++){
    if (*s == '.'){
      point_seen = 1; 
      continue;
    };
    int d = *s - '0';
    if (d >= 0 && d <= 9){
      if (point_seen) fact /= 10.0f;
      rez = rez * 10.0f + (float)d;
    };
  };
  return rez * fact;
};

这篇关于将字符串转换,浮动(不ATOF)用C的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆