2013-06-19 15 views
68

Gerçekten kapatmak herhangi bir cevap bulamadık ...C++ 1 karakterden dizeye dönüştürülüyor mu?

zıt yönlü str gibi oldukça basittir [0]

Ama dizeye sadece 1 kömürü döküm gerekiyor ...

böyle

:

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

yeniden edilemez: http://coliru.stacked-crooked.com/view?id=921396d51d6d0324bef7cc64062decc3-1dfa45f65786f4a26064bc85b3de325a – chris

+7

Eğer 'dize (1, c)' çalışmıyor ne malum? Bunu yapmanın doğru yolu budur. – templatetypedef

+0

Hangi derleyiciyi kullanıyorsunuz? Hangi ortam. Belki bu derleyicinizle ilgili bir hatadır. –

cevap

115

Tümü.

+0

En kısa yol: string s = “” + c; – doctorram

+0

@doctorram NO! 1. Kullandığınız tırnak işaretleri geçersiz C++; 2. 's = "" + c 'anlamına gelse bile sadece UB," c "karakteriyle boş dizeyi birleştirmek anlamına gelmediğinden," boş bir dizenin bir kopyasının işaretçisidir, "c" nin sayısal değeri (tam olarak istediğin gibi değil), 3. Eğer s = "" s + c "yi kastediyorsan, bu daha uzun bir süredir {1, c} ... std :: literals kullanarak 'yazmak zorunda kalacaktı,' 'bir yerde… – Massa

+1

Üzgünüm, demek istediğim: string s = string() + 'a'; – doctorram

6

dürüst döküm yöntemi iyi çalışır düşündük. Çünkü sen stringstream deneyebilirsiniz. Bir örnek aşağıdadır:

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

ve

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

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

benim için çalıştı

ait

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

Bu özel dize kurucusunun çalışmadığı gerçeğinin gerçek sorunla ilgili olduğunu sanmıyorum. – chris

+1

Muhtemelen haklı, ama kolay cevabı sunacağımı düşündüm: P – Mallen

İlgili konular