可能性のある複製:
C++でdoubleを文字列に変換するにはどうすればよいですか
文字列とdoubleを組み合わせたいのですが、g ++はこのエラーをスローしています:
main.cpp:関数「int main()」内:
main.cpp:40:エラー:タイプ「const char [2]」および「double」からバイナリ「operator +」の無効なオペランド
エラーをスローしているコード行は次のとおりです。
storedCorrect [count] = "(" + c1 + "、" + c2 + ")";
storedCorrect []は文字列配列であり、c1とc2は両方ともdoubleです。プログラムを正しくコンパイルできるように、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;
さまざまなdouble-to-string変換関数を使用する方法は他にもたくさんありますが、これらが主な方法です。
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のような標準ライブラリにいます。詳細については、以下のリンクを参照してください。