web-dev-qa-db-ja.com

C ++はテキストと変数の文字列を作成します

私は非常に簡単なことをしようとしていますが、検索の1時間後に適切な答えを見つけることができないので、かなり明白なものを見逃す必要があります。

Ifstreamで使用するファイル名を動的に作成しようとしています。これを行うためのさまざまな方法があることは理解していますが、std :: stringを作成し、stringname.c_strを使用してconstに変換することに決めました。

ただし問題は、変数と事前定義されたテキスト値を組み合わせて文字列を作成する必要があることです。コンパイラエラーが発生しているので、これは構文の問題であるに違いありません。

擬似

std::string var = "sometext" + somevar + "sometext" + somevar;

ありがとう!

36
Jack Farrow

文字列ストリームの使用を検討しましたか?

#include <string>
#include <sstream>

std::ostringstream oss;
oss << "sometext" << somevar << "sometext" << somevar;
std::string var = oss.str();
52
mgiuffrida
_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;
_
22
David Schwartz

C++ 11では、 std :: to_string を使用できます。

std::string var = "sometext" + std::to_string(somevar) + "sometext" + std::to_string(somevar);  
19
David Rinck

boost :: format も参照してください:

#include <boost/format.hpp>

std::string var = (boost::format("somtext %s sometext %s") % somevar % somevar).str();
3
Yury

Sprintfも使用できます。

char str[1024];
sprintf(str, "somtext %s sometext %s", somevar, somevar);
2
Shocker