2011-08-17 33 views
2

私は2つのchar *文字列と1つのstd :: stringに結合する必要があるchar *リテラルを持っています。以下は私がやっていることです。それは動作しますが、私はそれが見える方法(3行)を好きではありません。私はそれを行う良い方法があるかどうか疑問に思っています...複数のchar *文字列をstd :: stringにフォーマットする

std::string strSource = _szImportDirectory; 
strSource += "\\"; 
strSource += _szImportSourceFile; 

ありがとうございます!

答えて

8
std::string strSource = std::string(_szImportDirectory) + "\\" + _szImportSourceFile; 

1つの明白な方法です。それを行うための最も柔軟性と保守性の道をだ

std::stringstream s; 
s << _szImportDirectory << '\\' + _szImportSourceFile; 
std::string strSource = s.str() 

が、それはまだ三行が必要です。

もう一つの方法は、std::stringstreamを使用することです。

+1

おかげで更新。私は、(私がしばしばする)結合するchar *の数が多ければ、stringstreamの方がより効率的になると思います。私は今のところそれに行くつもりです。そして今、私はそれについて考えています。ストリングスストリームでは、私はintとそれ以外のものを組み込むこともできます。それは間違いなく私が望んでいたものです。 –

+0

はい、あなたが正しいです、より効率的です。 –

+0

セス、実際には問題に関連していませんが、もし私がストリングストリームを持っていて、それからchar *を取得したいのであれば、ストリングストリームから何とか直接得ることができますか?または、std :: stringを取得してからc_str()を実行しますか? –

2

これは何か?

std::string str = std::string(_szImportDirectory).append("\\").append(_szImportSourceFile); 

PS:正しいコード

+0

ところで、JavaのStringBufferスタイルのように見えます:) –

+0

これは良いことです。真実は、C++の文字列を使って作業するときにJavaの便利さをすべて失っていると言われています。 (下落したコメントは私の評判に影響を及ぼしますか?) –

+0

@ジョン:コメントはダウン投票できません。 – ybungalobill

関連する問題