C ++ 1 karakterden dizeye dönüştürülsün mü? [kapalı]


121

Sadece 1 döküm gerekir chariçin string. Bunun tersi oldukça basittir str[0].

Aşağıdakiler benim için işe yaramadı:

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
Çoğaltılamıyor: coliru.stacked-crooked.com/…
chris

10
Sizi string(1, c)işe yaramadığını düşündüren nedir ? Bunu yapmanın doğru yolu bu.
templatetypedef

1
Hangi derleyiciyi kullanıyorsunuz? Hangi ortam. Belki bu derleyicinizle ilgili bir hatadır.
Maurice Reeves

libc ++ abi.dylib: istisna atma çağrısını sonlandır
weeo

3
@ weeo- Hata muhtemelen programınızda başka bir yerdedir. Neyin yanlış olduğunu anlamanıza yardımcı olabilmemiz için lütfen hatayı gösteren bağımsız, tekrarlanabilir bir örnek gönderin.
templatetypedef

Yanıtlar:


184

Hepsi

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

ve

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

ve

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

benim için çalıştı.


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

17
@doctorram HAYIR! 1. Kullandığınız tırnak işaretleri geçersiz C ++; 2. s = "" + c"Boş dizeyi karakterle bitiştir" anlamına gelmediği için yalnızca UB olduğunu kastetmiş olsanız bile, "boş bir dizenin cbazı kopyalarına işaretçi, sayısal değeriyle ilerletilen c(kesinlikle sizin istediyseniz); 3. Eğer demek istediyseniz s = ""s + c, hala s{1, c}... (ve bir using std::literals;yere yazmanız gerekir ...
Massa

11
Üzgünüm, şunu demek istedim: string s = string () + 'a';
doctorram

1
Bu yanlış yorumla ilgili olumlu oyu kaldıramıyorum ...
Jake OPJ

10

Dürüst olmak gerekirse, döküm yönteminin iyi çalışacağını düşündüm. Olmadığı için stringstream'i deneyebilirsiniz. Bir örnek aşağıdadır:

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

2
Bu belirli dizi oluşturucunun çalışmadığı gerçeğinin gerçek sorunla ilgisi olduğunu sanmıyorum.
chris

1
Muhtemelen doğru, ama kolay cevabı vereceğimi düşündüm: P
Mallen

Bu çözüm çalışır, ancak <sstream>tüm kütüphaneyi projeye dahil edeceğinden ve derleme sürecini yavaşlatacağından stringstream ( ) kullanmak gerekli değildir. Projenize gereksiz bağımlılıklar eklemekten kaçının.
Cristian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.