char1 + char2を返しますか?可能ではありませんか?
質問
関数から文字列を返そうとしています。基本的にいくつかのチャーを一緒に追加し、文字列表現を返します。
string toString() {
char c1, c2, c3;
// some code here
return c1 + c2; // Error: invalid conversion from `char' to `const char*'
}
C1 == 'x'を返すようなブール値を返すことができます。文字列値を返すことはできませんか?私はそれがこのように可能であることを知っています:
string result;
result.append(c1, c2);
return result;
私はC ++が初めてなので、よりエレガントなソリューションが必要だと思いました。
解決
いいえ、2つのチャーを一緒に追加することで文字列が得られないため、それはできません。それはあなたに別のcharを与えます。この場合 'a'+'b'
実際にあなたに与えます '├'
(標準のWindowsで CP_ACP コードページ)。 Charは整数のような順序タイプであり、コンパイラは最も基本的な方法でそれらを追加する方法のみを知っています。弦はまったく異なる獣です。
あなたはそれをすることができますが、あなたは明示的でなければなりません:
return string(1, c1) + string(1, c2)
これにより、2つのパラメーターとして渡された文字の1つの繰り返しに初期化された2つの一時文字列が構築されます。以来 operator+
文字列が連結関数であるために定義されているため、必要なことを行うことができます。
他のヒント
char
C ++(およびCの)のタイプは積分タイプです。それらは積分タイプとして動作します。あなたが書くときのように 5 + 3
あなたのコードでは、あなたは積分を得ることを期待しています 8
結果として(そして文字列ではありません "53"
)、あなたが書くとき c1 + c2
上記のコードでは、積分結果が得られることを期待する必要があります - の算術的合計 c1
と c2
.
あなたが実際にしたいなら 連結 2つの文字列を形成するには、別の方法で行う必要があります。それをする方法はたくさんあります。たとえば、Cスタイルの文字列を形成できます
char str[] = { c1, c2, `\0` };
これは暗黙的に変換されます std::string
に
return str;
または、aを構築できます std::string
すぐに(いくつかの異なる方法で実行できます)。
各charを文字列に変換してから使用できます +:
return string(1, c1)+string(1, c2);
あるいは、文字列には +オペレーターのオーバーロードが文字で動作するため、次のことを書くことができます。
return string(1, c1) + c2;
どんな方法を選択しても、積分タイプを変換する必要があります char
Cスタイルの文字列のいずれかに(char*
またはC ++スタイルの文字列(std::string
).
return string(1, c1) + c2;
これにより、C1を含む1文字の文字列が構築され、C2(別の文字列の作成)を追加し(連結して過負荷)、それを返します。
いいえ、彼らは文字コードを合計するだけです。それらを文字列に変換する必要があります。
チャーから文字列を作成する必要があります。
そして、文字列を返します(実際には文字列のコピー)