将字符串转换为 C 中的 float (无 atof)

标签 c

我正在设计一个将字符串转换为 float 的函数。 例如"45.5"= 45.5

到目前为止,我有这个。但这似乎不起作用。请记住,我们不能为此使用任何 C 库函数,例如 atoi、atof 甚至 pow。

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;  
}

最佳答案

这是我的尝试:

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;
};

关于将字符串转换为 C 中的 float (无 atof),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4392665/

相关文章:

java - UTF8 字包含日英混合字符。如何识别哪个字符是日文哪个是英文?

c++ - 编译自定义 c++ 包装器 sqlite3

c++ - GCC中格式错误的C/C++多维数组初始化

c - 如何执行 sscanf 最多 70 个字符或换行符

c - 反转 7 位整数编码

c - 为什么函数会生成负数?

c - 使用 fgets 将行复制到字符串数组中?

我可以将函数作为参数传递并且该函数可以保存不同的参数吗?

c - C 中的数组、字符串、指针操作

c - 为本地声明公开一个 typedef 结构,但将结构成员访问权限保留在定义它的模块中