将字符数组转换为float

时间:2014-07-02 11:18:27

标签: c++ visual-c++ floating-point

我正在尝试将我的字符数组数据转换为float。有可能吗?

代码:

char str[5] = {'1', '2', '.', '3'}
void main(char str[])
{
    float var = (float)str[]; //error
}

此代码无效。所以我也尝试使用:

float var = (float) (str[0], str[1], str[2], str[3]); //output: 49

以及

float var = (float) (str[0] + str[1] + str[2] + str[3]); //output: 196

但他们也没有按预期工作..

我的预期输出应为float var = 12.3

2 个答案:

答案 0 :(得分:7)

是的,使用std::stof,它接受​​一个C字符串(即一个以空字符结尾的字符数组)并给你一个后退(如果可能的话):

#include <iostream>
#include <string>
#include <cassert>

int main(int argc, char* argv[])
{
   assert(argc >= 2);
   const float var = std::stof(argv[1]);
   std::cout << var << '\n';
}

// $ myProgram 12.3
// 12.3

live demo

请注意,我还更正了您的main返回类型(必须是int),并且我使用了更常规的函数参数集:尽管它们的要求已经达到实施,VS doesn't document any support for this unconventional variant

当然,您不需要输入来自命令行:

#include <iostream>
#include <string>

int main()
{
   const std::string str = "12.3";
   // or `const std::string str   = {'1', '2', '.', '3'};
   // or `const char        str[] = {'1', '2', '.', '3', '\0'};

   const float var = std::stof(str);
   std::cout << var << '\n';
}

// $ myProgram
// 12.3

live demo

答案 1 :(得分:2)

std::string str = {'1', '2', '.', '3'};
float var = std::stof(str);