如何在不使用atof函数的情况下将命令行添加为数字数据?

时间:2015-01-25 18:34:20

标签: c++

有没有办法可以避免使用atof功能?如何将字符串转换为float?

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
    double x = 0;
    for(int i=0; i<argc; i++)
    x += atof(argv[i]);
    cout<<x<<endl;
    return 0;
}

3 个答案:

答案 0 :(得分:1)

您可以使用stringstream

#include <iostream>
#include <sstream>
using namespace std;

int main () {    
  int val;
  stringstream ss (stringstream::in | stringstream::out);
  ss << "120";   
  ss >> val;    
  return 0;
}

答案 1 :(得分:0)

为了在C ++中将字符串转换为浮点数,它现在(因为C ++ 11的标准化)建议使用one of std::stof, std::stod and std::strold(这些函数已添加到C ++中)标准库):

std::string s = "120.0";
float f = std::stof(s);
double d = std::stod(s);
long double ld = std::stold(s);

比C标准库更喜欢这些功能的主要原因是安全性:

  1. 他们不会对原始指针进行操作,而是对字符串对象进行操作(这也会导致方便性和可读性方面的轻微改进:在使用时,不必一次又一次地调用c_str() std::string S);以及

  2. 当转换不可能时,他们不会表现出未定义的行为(相反,他们可以预测会出现记录良好的异常)。

答案 2 :(得分:0)

您可以使用boost::lexical_cast以对C ++非常惯用的方式在书面和数字类型之间进行转换。

#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>

using namespace std;

int main(int argc, char* argv[])
{
    double x = 0;
    for(int i=1; i<argc; i++)
    x += boost::lexical_cast<float>(argv[i]);
    cout<<x<<endl;
    return 0;
}