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.

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.


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;

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.