2012-07-29 161 views

回答

2

使用例如。

double func (const std::string& s1, const std::string& s2) 
{ 
    return boost::lexical_cast<double>(s1) + boost::lexical_cast<double>(s2); 
} 

,或者使用std::stringstreamstrtod

2
double doubleFromString(const std::string &str) 
{ 
    std::istringstream is(str); 
    double res; 
    is >> res; 
    return res; 
} 
1

C++ 11包含std::stod,其中转换的string到两倍。否则,您可以使用stringstreamsboost::lexical_cast<double>。因此你的选择是:

return std::stod(s1) + std::stod(s2); //(c++11 only), or: 
return boost::lexical_cast<double>(s1) + boost::lexical_cast<double>(s2); //or: 
std::stringstream ss1(s1); 
std::stringstream ss2(s2); 
double a, b; 
ss1>> a; 
ss2>>b; 
return a+b; 

当然,你也可以去c路线和使用sprintf

4

如果您的编译器支持C++ 11,则有一个函数stod可将字符串转换为double。

你的函数将只是

return std::stod(s1) + std::stod(s2); 
+0

如果函数retrun类型是int ???所以它相同??? – user1356323 2012-07-29 14:17:46

7

除了其他的答案,最简单的方法(在C++ 11至少)会是:

double add(const std::string &s1, const std::string &s2) 
{ 
    return std::stod(s1) + std::stod(s2); 
} 
+0

if function retrun type is int ??? so so same ??? – user1356323 2012-07-29 14:07:16

+0

如果字符串包含一个'int',那么还有'std :: stoi' [和一组其他的](http://en.cppreference.com/w/cpp/string/basic_string/stol)。 – 2012-07-29 14:22:35

-1

我会使用去字符串流,因为你不需要对C++ 11的支持。

本文中cplusplus.com回答你的问题:http://www.cplusplus.com/reference/iostream/istringstream/istringstream/

但是,这是我会做什么:

#include <string> 
#include <sstream> 

double function (std::string s1, std::string s2) 
{ 
    std::istringstream iss (std::string(s1 + " " + s2), std::istringstream::in); 
    double a, b; 
    iss >> a; 
    iss >> b; 

    return a + b; 
} 
+0

字符串连接的好用法可以避免代价昂贵的istringstream构造函数。 – 2012-07-29 13:57:58

+0

,我认为这是一个顽皮的黑客!谢谢 :) – 2012-07-29 17:32:53