2013-06-19 12 views
68

私は本当に[0]C++を1文字から文字列に変換しますか?

反対の方法は、strのような非常に簡単です...

を閉じどんな答えを見つけられませんでした。しかし、私は文字列にのみ1文字をキャストする必要があります...

このように:

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 return null 
+3

は再現できません:http://coliru.stacked-crooked.com/view?id=921396d51d6d0324bef7cc64062decc3-1dfa45f65786f4a26064bc85b3de325a – chris

+7

あなたは '文字列(1、C)'は動作しません。どう思いますか?それはこれを行う正しい方法です。 – templatetypedef

+0

どのコンパイラを使用していますか?どのような環境。おそらく、これはあなたのコンパイラのバグです。 –

答えて

115

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

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

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

のすべてが私のために働きました。

+0

最短方法は次のとおりです:string s = "" + c; – doctorram

+0

@doctorram NO! 1.使用している引用符は無効です。C++。 2.あなたが 's =" "+ c'を意味していたとしても、それは単に"空の文字列を文字 'c'と連結することを意味するものではないので、それはUBです。"空文字列のコピーを指すポインタあなたが 's =" "s + c'を意味するならば、それは' s {1、c} 'よりもずっと長くなります(そしてあなたはあなたが望むものではありません) – Massa

+1

申し訳ありません、私は意味しました:string s = string()+ 'a'; – doctorram

6

正直言って、キャスティング方法はうまくいくと思いました。それ以来、あなたはストリングストリームを試すことはできません。以下の例は次のとおりです。

#include <sstream> 
#include <string> 
stringstream ss; 
string target; 
char mychar='a'; 
ss << mychar; 
ss >> target; 
+2

この特定の文字列コンストラクタが動作していないという事実は、実際の問題とは何の関係もないと思います。 – chris

+1

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

関連する問題