C++ 在c+中添加两个字符串+;

C++ 在c+中添加两个字符串+;,c++,visual-c++,C++,Visual C++,可能重复: 在csharp中 string s1="12345" string s2="54321" public double (string s1,string s2) { convert.todouble(s1) +convert.to-double(s2) } 我在C++中做的是因为没有转换类使用 Boo:: double func (const std::string& s1, const std::string& s2) { return boost

可能重复:

在csharp中

string s1="12345"
string s2="54321"

public double (string s1,string s2)
{
  convert.todouble(s1) +convert.to-double(s2)
}

我在C++中做的是因为没有转换类

使用<代码> Boo::
double func (const std::string& s1, const std::string& s2)
{
    return boost::lexical_cast<double>(s1) + boost::lexical_cast<double>(s2);
}
double func(常量std::string&s1,常量std::string&s2)
{
返回boost::lexical_cast(s1)+boost::lexical_cast(s2);
}

或者使用
std::stringstream
strotd
等。例如,使用
boost::lexical_cast

double func (const std::string& s1, const std::string& s2)
{
    return boost::lexical_cast<double>(s1) + boost::lexical_cast<double>(s2);
}
double doubleFromString(const std::string &str)
{
    std::istringstream is(str);
    double res;
    is >> res;
    return res;
}
double func(常量std::string&s1,常量std::string&s2)
{
返回boost::lexical_cast(s1)+boost::lexical_cast(s2);
}

或者使用
std::stringstream
strotd
等。

c++11包含
std::stod
,它将
字符串
转换为双精度字符串。否则,您可以使用
stringstreams
boost::lexical\u cast
。因此,您的选择是:

double doubleFromString(const std::string &str)
{
    std::istringstream is(str);
    double res;
    is >> res;
    return res;
}
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;
返回std::stod(s1)+std::stod(s2)//(仅限c++11),或:
返回boost::lexical_cast(s1)+boost::lexical_cast(s2)//或:
标准::stringstream ss1(s1);
std::stringstream ss2(s2);
双a,b;
ss1>>a;
ss2>>b;
返回a+b;

当然,您也可以使用c路径,并使用
sprintf

c++11 contains
std::stod
,它将
字符串
转换为双精度字符串。否则,您可以使用
stringstreams
boost::lexical\u cast
。因此,您的选择是:

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;
返回std::stod(s1)+std::stod(s2)//(仅限c++11),或:
返回boost::lexical_cast(s1)+boost::lexical_cast(s2)//或:
标准::stringstream ss1(s1);
std::stringstream ss2(s2);
双a,b;
ss1>>a;
ss2>>b;
返回a+b;

当然,您也可以使用c语言,使用
sprintf

如果您的编译器支持c++11,那么有一个函数
stod
可以将字符串转换为双精度字符串

你的功能将是公正的

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

如果您的编译器支持C++11,那么有一个函数
stod
可以将字符串转换为双精度字符串

你的功能将是公正的

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

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

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

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

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

我会使用字符串流,因为您不需要对c++11的支持

cpluplus.com上的这篇文章回答了您的问题:

但我会这么做:

#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;
}
#包括
#包括
双功能(标准::字符串s1,标准::字符串s2)
{
std::istringstream-iss(std::string(s1+“”+s2),std::istringstream::in);
双a,b;
iss>>a;
iss>>b;
返回a+b;
}

我倾向于使用字符串流,因为您不需要对c++11的支持

cpluplus.com上的这篇文章回答了您的问题:

但我会这么做:

#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;
}
#包括
#包括
双功能(标准::字符串s1,标准::字符串s2)
{
std::istringstream-iss(std::string(s1+“”+s2),std::istringstream::in);
双a,b;
iss>>a;
iss>>b;
返回a+b;
}

@valdo:除了C++也是一种高级编程语言之外。@valdo:除了C++也是一种高级编程语言之外。很好地使用了字符串连接来避免代价高昂的istringstream构造函数。我认为这是一种顽皮的攻击!谢谢:)很好地使用了字符串连接来避免昂贵的istringstream构造函数。我认为这是一个顽皮的攻击!谢谢:)如果函数retrun类型是int???那么它是相同的???如果字符串包含
int
,那么也有
std::stoi
。如果函数retrun类型是int???那么它是相同的???如果字符串包含
int
,还有
std::stoi
。如果函数retrun类型是int???,那么它是相同的???如果函数retrun类型是int???,那么它是相同的???