有没有办法可以避免使用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;
}
答案 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标准库更喜欢这些功能的主要原因是安全性:
他们不会对原始指针进行操作,而是对字符串对象进行操作(这也会导致方便性和可读性方面的轻微改进:在使用时,不必一次又一次地调用c_str()
std::string
S);以及
当转换不可能时,他们不会表现出未定义的行为(相反,他们可以预测会出现记录良好的异常)。
答案 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;
}