C ++は1文字から文字列に変換しますか?[閉まっている]


121

私は唯一の1をキャストする必要がありますcharstring。反対の方法はのようにかなり単純ですstr[0]

以下は私にとってはうまくいきませんでした:

char c = 34;
string(1,c);
//this doesn't work, the string is always empty.

string s(c);
//also doesn't work.

boost::lexical_cast<string>((int)c);
//also doesn't work.

3
再現することはできません:coliru.stacked-crooked.com/...
クリス・

10
何がうまくstring(1, c)いかないと思いますか?これが正しい方法です。
templatetypedef

1
どのコンパイラを使用していますか?どのような環境。多分これはあなたのコンパイラのバグです。
モーリスリーブズ2013年

libc ++ abi.dylib:例外がスローされて終了が呼び出されました
weeo

3
@ weeo-エラーはおそらくプログラムの他の場所にあります。エラーの例を示す自己完結型の再現可能な例を投稿してください。これにより、何が問題なのかを理解できるようになります。
templatetypedef

回答:


184

すべての

std::string s(1, c); std::cout << s << std::endl;

そして

std::cout << std::string(1, c) << std::endl;

そして

std::string s; s.push_back(c); std::cout << s << std::endl;

私のために働いた。


4
最短の方法は次のとおりです。文字列s =“” + c;
doctorram

17
@ドクターラムNO!1.使用している引用符が無効なC ++である; 2. s = "" + c「空の文字列を文字と連結する」という意味ではないため、単にUBであることを意味しているとしても、「空の文字列のcコピーへのポインタ、つまり、数値によって進められるc(これは、実際には3.を意味した場合s = ""s + c、それが意味する場合、それはs{1, c}... よりも長くなります(そして、using std::literals;どこかに書き込む必要があります...
Massa

11
申し訳ありませんが、次のことを意味します:string s = string()+ 'a';
Doctorram 2018年

1
私はその間違ったコメントへの賛成投票を削除できます...
Jake OPJ

10

キャスティングはうまくいくと思いました。それができないので、stringstreamを試すことができます。以下に例を示します。

#include <sstream>
#include <string>
std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;

2
この特定の文字列コンストラクターが機能していないという事実は、実際の問題とは関係がないと思います。
クリス

1
おそらく正しいが、私が簡単な答えを提供すると思いました:P
Mallen

このソリューションは機能しますが、stringstream(<sstream>)を使用する必要はありません。プロジェクトにライブラリ全体が含まれ、コンパイルプロセスが遅くなるためです。プロジェクトに不要な依存関係を含めないようにしてください。
クリスティアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.