可能重复:
如何转换出双入在C ++字符串?
我想一个字符串组合和双和g ++引发此错误:
main.cpp中:在函数 '诠释主()':
main.cpp中:40:错误:类型的无效操作数的常量字符[2]“和“双”为二进制“运算符+”
下面是它抛出错误代码行:
storedCorrect[count] = "("+c1+","+c2+")";
storedCorrect []是一个字符串数组,和c1和c2均为双打。 有没有一种方法,以C1和C2转换成字符串让我的程序编译正确?
可能重复:
如何转换出双入在C ++字符串?
我想一个字符串组合和双和g ++引发此错误:
main.cpp中:在函数 '诠释主()':
main.cpp中:40:错误:类型的无效操作数的常量字符[2]“和“双”为二进制“运算符+”
下面是它抛出错误代码行:
storedCorrect[count] = "("+c1+","+c2+")";
storedCorrect []是一个字符串数组,和c1和c2均为双打。 有没有一种方法,以C1和C2转换成字符串让我的程序编译正确?
你不能直接这样做。 有许多方法可以做到这一点:
使用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;
还有一些其他的方式,利用各种双到字符串转换功能,但这些都是你会看到它做的主要途径。
在C ++ 11, 使用std::to_string
如果你能接受默认的格式( %f
)。
storedCorrect[count]= "(" + std::to_string(c1) + ", " + std::to_string(c2) + ")";
使用std::stringstream
。 它的operator <<
被重载的所有内置类型。
#include <sstream>
std::stringstream s;
s << "(" << c1 << "," << c2 << ")";
storedCorrect[count] = s.str();
这就像你所期望的-您打印到与屏幕相同的方式std::cout
。 你是简单地“打印”到一个字符串代替。 的内部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风格的字符串。
std::string stringify(double x)
{
std::ostringstream o;
if (!(o << x))
throw BadConversion("stringify(double)");
return o.str();
}
C ++ FAQ: http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.1
我相信sprintf的是适合你的功能。 我是在标准库,如printf。 按照下面以获取更多信息的链接:
http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/