私は非常に簡単なことをしようとしていますが、検索の1時間後に適切な答えを見つけることができないので、かなり明白なものを見逃す必要があります。
Ifstreamで使用するファイル名を動的に作成しようとしています。これを行うためのさまざまな方法があることは理解していますが、std :: stringを作成し、stringname.c_strを使用してconstに変換することに決めました。
ただし問題は、変数と事前定義されたテキスト値を組み合わせて文字列を作成する必要があることです。コンパイラエラーが発生しているので、これは構文の問題であるに違いありません。
擬似
std::string var = "sometext" + somevar + "sometext" + somevar;
ありがとう!
文字列ストリームの使用を検討しましたか?
#include <string>
#include <sstream>
std::ostringstream oss;
oss << "sometext" << somevar << "sometext" << somevar;
std::string var = oss.str();
_std::string var = "sometext" + somevar + "sometext" + somevar;
_
追加は左から右に実行され、_"sometext"
_(最初のもの)は単なる_const char *
_であるため、これは機能しません。呼び出す_operator+
_はありません。最も簡単な修正はこれです:
_std::string var = std::string("sometext") + somevar + "sometext" + somevar;
_
現在、左から右への_+
_操作のリストの最初のパラメーターは、operator+(const char *)
を持つ_std::string
_です。その演算子は、チェーンの残りを機能させる文字列を生成します。
すべての操作をvar
で行うこともできます。これは_std::string
_であり、必要なすべての演算子があります。
_var = "sometext";
var += somevar;
var += "sometext";
var += somevar;
_
C++ 11では、 std :: to_string を使用できます。
std::string var = "sometext" + std::to_string(somevar) + "sometext" + std::to_string(somevar);
boost :: format も参照してください:
#include <boost/format.hpp>
std::string var = (boost::format("somtext %s sometext %s") % somevar % somevar).str();
Sprintfも使用できます。
char str[1024];
sprintf(str, "somtext %s sometext %s", somevar, somevar);