C ++ von 1 Zeichen in Zeichenfolge konvertieren? [geschlossen]

121

Ich muss nur 1 charzu besetzen string. Der umgekehrte Weg ist ziemlich einfach str[0].

Folgendes hat bei mir nicht funktioniert:

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.
weeo
quelle
3
Kann nicht reproduzieren: coliru.stacked-crooked.com/…
chris
10
Was lässt Sie denken, dass string(1, c)es nicht funktioniert? Das ist der richtige Weg, dies zu tun.
Templatetypedef
1
Welchen Compiler verwenden Sie? Welche Umgebung. Vielleicht ist dies ein Fehler mit Ihrem Compiler.
Maurice Reeves
libc ++ abi.dylib: Beenden Sie das Auslösen einer Ausnahme
weeo
3
@ weeo- Der Fehler ist wahrscheinlich irgendwo anders in Ihrem Programm. Bitte veröffentlichen Sie ein in sich geschlossenes, reproduzierbares Beispiel, das den Fehler demonstriert, damit wir Ihnen helfen können, herauszufinden, was falsch ist.
Templatetypedef

Antworten:

184

Alle

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

und

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

und

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

arbeitete für mich.

Massa
quelle
4
Der kürzeste Weg ist: string s = “” + c;
Doctorram
17
@doctorram NEIN! 1. Die von Ihnen verwendeten Anführungszeichen sind ungültiges C ++. 2. Selbst wenn Sie gemeint haben, dass s = "" + ces nur UB ist, weil es nicht "die leere Zeichenfolge mit dem Zeichen verketten c" bedeutet, bedeutet es "den Zeiger auf eine Kopie einer leeren Zeichenfolge, die um den numerischen Wert von erweitert wird c(was definitiv nicht das ist, was Sie sind wollte); 3. wenn du s = ""s + cmeintest, es ist immer noch länger als s{1, c}... (und du müsstest using std::literals;irgendwo schreiben ...
Massa
11
Entschuldigung, ich meinte: string s = string () + 'a';
Doctorram
1
Ich kann die Gegenstimme zu diesem falschen Kommentar nicht entfernen ...
Jake OPJ
10

Ich dachte ehrlich, dass die Casting-Methode gut funktionieren würde. Da dies nicht der Fall ist, können Sie stringstream ausprobieren. Ein Beispiel ist unten:

#include <sstream>
#include <string>
std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;
Mallen
quelle
2
Ich glaube nicht, dass die Tatsache, dass dieser spezielle String-Konstruktor nicht funktioniert, etwas mit dem eigentlichen Problem zu tun hat.
Chris
1
Wahrscheinlich richtig, aber ich dachte, ich würde die einfache Antwort anbieten: P
Mallen
Diese Lösung funktioniert, die Verwendung von stringstream ( <sstream>) ist jedoch nicht erforderlich, da die gesamte Bibliothek in das Projekt einbezogen wird, wodurch der Kompilierungsprozess verlangsamt wird. Vermeiden Sie unnötige Abhängigkeiten zu Ihrem Projekt.
Cristian