2013-06-19 10 views
68

ich fand keine Antwort, die wirklich in der Nähe ...C++ von 1 Zeichen in Zeichenfolge konvertieren?

die entgegengesetzte Richtung wie str ziemlich einfach [0]

Aber ich brauche nur 1 Zeichen zu bespannen werfen ...

wie folgt aus:

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

kann nicht reproduzieren: http://coliru.stacked-crooked.com/view?id=921396d51d6d0324bef7cc64062decc3-1dfa45f65786f4a26064bc85b3de325a – chris

+7

Was macht denken Sie 'string (1, c)' nicht funktioniert? Das ist der richtige Weg. – templatetypedef

+0

Welchen Compiler benutzen Sie? Welche Umgebung? Vielleicht ist das ein Fehler mit Ihrem Compiler. –

Antwort

115

Alle

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

und

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

und

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

für mich gearbeitet.

+0

Der kürzeste Weg ist: String s = "" + c; – doctorram

+0

@doctorram NEIN! 1. die von Ihnen verwendeten Anführungszeichen sind ungültig C++; 2. selbst wenn du 's =" "+ c" meinst, ist es nur UB, weil es nicht bedeutet "die leere Zeichenkette mit dem Zeichen' c' zu verketten, es bedeutet "der Zeiger auf eine Kopie einer leeren Zeichenkette, die um der numerische Wert von "c" (was definitiv nicht das ist, was du wolltest); 3. wenn du "s =" "s + c" meinst, ist es länger als 's {1, c}' ... (und du müsste schreiben 'using std :: literals;' irgendwo ... – Massa

+1

Sorry, ich meinte: string s = string() + 'a'; – doctorram

6

ich dachte ehrlich, dass das Gießverfahren gut funktionieren würde. Da kann man Stringstream nicht ausprobieren. Ein Beispiel ist unten:

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

Ich glaube nicht, dass die Tatsache, dass dieser spezielle String-Konstruktor nicht funktioniert, etwas mit dem wirklichen Problem zu tun hat. – chris

+1

Wahrscheinlich richtig, aber ich dachte, ich würde die einfache Antwort anbieten: P – Mallen

Verwandte Themen