将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,以允许我的程序正确编译?

你不能直接做。 有很多方法可以做到这一点:

  1. 使用std::stringstream

     std::ostringstream s; s << "(" << c1 << ", " << c2 << ")"; storedCorrect[count] = s.str() 
  2. 使用boost::lexical_cast

     storedCorrect[count] = "(" + boost::lexical_cast<std::string>(c1) + ", " + boost::lexical_cast<std::string>(c2) + ")"; 
  3. 使用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库的一个关键优势是你可以用其他的方式(例如, stringdouble )。 没有更多的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。 请按照下面的链接获取更多信息:

http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/