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路径,并使用
sprintfc++11 containsstd::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???,那么它是相同的???