2012-07-29 163 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