web-dev-qa-db-ja.com

複数の文字を組み合わせて文字列を作成するにはどうすればよいですか?

私は文字列の解析を行っていますが、基本的に私がやりたいことは次のようなものです。

string signature = char[index+1] + '/' + char[index+2];

しかし、charの文字列連結を行うことはできないので、この質問に私を導きます。charの連結をシミュレートするにはどうすればよいですか?

C++の文字列ライブラリに追加があることは知っていますが、私の場合はうまくいかないと思います。何か案は?

9
Sarah

文字をstd::stringに連結できます。必要なのは、オペランドの1つをstd::stringにすることだけです。それ以外の場合は、整数を追加します。

std::string signature = std::string() + char_array[index+1] + '/' + char_array[index+2];

これは、チェーンの第1オペランドまたは第2オペランドのいずれかがstd::stringである場合にのみ機能することに注意してください。これにより、operator+への最初の呼び出しでstd::stringが返され、残りはそれに続きます。したがって、これは期待される結果をもたらしません。

std::string signature = char_array[index+1] + '/' + char_array[index+2] + std::string();
18

C++ 11では、実際に次のことができます。

std::string signature{chars[index+1], '/', chars[index+2]};

これが実際のコードでどれほど役立つかはわかりませんが、あなたの例を扱っています。

5
Steve Jessop

文字とCスタイルの文字列を既存の文字列にかなり簡単に連結できます。

string signature;

signature += char_array[index + 1];  // append character from char_array[index+1]
signature += '/';
signature += char_array[index + 2];  // append character from char_array[index+2]

+または+=の左側がstd::stringであることを確認する必要があります。

1
Joe Z

スティーブとベンジャミンのソリューションに加えて、std::stringstreamを使用することもできます。

std::stringstream ss;
ss << char_array[index + 1] << '/' << char_array[index + 2];
std::string s = ss.str();
1
Zac Howland