将double转换为stringC ++?
可能重复:
如何将C ++中的double转换为string?
我想结合一个string和一个双和g ++是抛出这个错误:
main.cpp:在函数'int main()'中:
main.cpp:40:错误:types'const char [2]'和'double'的操作数无效到二进制'operator +'
这里是它抛出错误的代码行:
storedCorrect [count] =“(”+ c1 +“,”+ c2 +“)”;
storedCorrect []是一个string数组,c1和c2都是双精度的。 有没有办法将c1和c2转换为string,以允许我的程序正确编译?
你不能直接做。 有很多方法可以做到这一点:
-
使用
std::stringstream
:std::ostringstream s; s << "(" << c1 << ", " << c2 << ")"; storedCorrect[count] = s.str()
-
使用
boost::lexical_cast
:storedCorrect[count] = "(" + boost::lexical_cast<std::string>(c1) + ", " + boost::lexical_cast<std::string>(c2) + ")";
-
使用
std::snprintf
:char buffer[256]; // make sure this is big enough!!! snprintf(buffer, sizeof(buffer), "(%g, %g)", c1, c2); storedCorrect[count] = buffer;
还有其他一些方法,使用各种双string转换函数,但是这些是您看到完成的主要方法。
在C ++ 11中,如果您可以接受默认格式( %f
),请使用std::to_string
。
storedCorrect[count]= "(" + std::to_string(c1) + ", " + std::to_string(c2) + ")";
使用std::stringstream
。 其operator <<
对于所有内置types都是重载的。
#include <sstream> std::stringstream s; s << "(" << c1 << "," << c2 << ")"; storedCorrect[count] = s.str();
这就像你所期望的那样工作 – 就像用std::cout
打印屏幕一样。 你只是“打印”到一个string。 operator <<
的内部operator <<
注意确保有足够的空间和做任何必要的转换(例如, double
string
)。
另外,如果您有Boost库,则可以考虑查看lexical_cast
。 该语法看起来很像正常的C ++风格的转换:
#include <string> #include <boost/lexical_cast.hpp> using namespace boost; storedCorrect[count] = "(" + lexical_cast<std::string>(c1) + "," + lexical_cast<std::string>(c2) + ")";
底下, boost::lexical_cast
基本上和std::stringstream
做同样的事情。 使用Boost库的一个关键优势是你可以用其他的方式(例如, string
来double
)。 没有更多的atof()
或strtod()
和原始的C风格的string搞乱。
std::string stringify(double x) { std::ostringstream o; if (!(o << x)) throw BadConversion("stringify(double)"); return o.str(); }
C ++常见问题: http : //www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.1
我相信sprintf对你来说是正确的function。 我在标准库中,像printf。 请按照下面的链接获取更多信息: