Frage

Ich versuche, eine Zeichenfolge aus einer Funktion zurückzugeben. Das fügt im Grunde einige Zeichen zusammen und gibt die String -Darstellung zurück.

string toString() {
   char c1, c2, c3;
   // some code here
   return c1 + c2; // Error: invalid conversion from `char' to `const char*'
}

Es ist möglich, boolesche Werte wie return c1 == 'x' zurückzugeben. Ist es nicht möglich, Zeichenfolgewerte zurückzugeben? Ich weiß, dass es so möglich ist:

string result;
result.append(c1, c2);
return result;

Ich bin neu in C ++, also dachte ich, dass es eine elegantere Lösung geben muss.

War es hilfreich?

Lösung

Nein, das können Sie nicht tun, weil Ihnen das Hinzufügen von zwei Kohs zusammen keine Zeichenfolge gibt. Es gibt Ihnen einen anderen Char; in diesem Fall 'a'+'b' gibt dir eigentlich '├' (unter Windows mit dem Standard CP_ACP Codepage). Char ist ein ordinaler Typ wie Ganzzahlen und der Compiler weiß nur, wie man sie auf die grundlegendste Weise hinzufügt. Saiten sind ein völlig anderes Tier.

Sie können es tun, aber Sie müssen explizit sein:

return string(1, c1) + string(1, c2)

Dadurch werden zwei temporäre Zeichenfolgen erstellt, die jeweils auf eine Wiederholung des als zweiten Parameters bestandenen Zeichens initialisiert wurden. Seit operator+ Es ist definiert, dass Saiten eine Verkettungsfunktion sind. Sie können jetzt das tun, was Sie wollen.

Andere Tipps

char Typen in C ++ (sowie in C) sind Integraltypen. Sie verhalten sich als integrale Typen. Genau wie beim Schreiben 5 + 3 In Ihrem Code erwarten Sie Integral 8 als Ergebnis (und nicht Zeichenfolge "53"), wenn du schreibst c1 + c2 In Ihrem obigen Code sollten Sie erwarten, ein integriertes Ergebnis zu erzielen - die arithmetische Summe von c1 und c2.

Wenn Sie tatsächlich wollen verketten Zwei Zeichen, um eine Zeichenfolge zu bilden, müssen Sie es anders machen. Es gibt viele Möglichkeiten, es zu tun. Zum Beispiel können Sie eine Zeichenfolge im C-Stil bilden

char str[] = { c1, c2, `\0` };

die implizit konvertiert werden std::string durch

return str;

Oder Sie können a bauen std::string sofort (was auch auf verschiedene Arten erfolgen kann).

Sie können jedes Zeichen in eine Zeichenfolge konvertieren und dann +verwenden:

return string(1, c1)+string(1, c2);

Alternativ kann String die + Operator -Überladung mit Zeichen haben, sodass Sie schreiben können:

return string(1, c1) + c2;

Egal für welche Methode Sie wählen, Sie müssen den Integraltyp konvertieren char zu einer entweder in eine C-Style-Saite (char*) oder eine C ++ - Style String (std::string).

return string(1, c1) + c2;

Dies konstruiert eine 1-Charakter-Zeichenfolge, die C1 enthält, und fügt dann (überladen in die Verkettung) C2 (Erstellen einer anderen Zeichenfolge) hinzu und gibt sie dann zurück.

Nein, sie addieren nur die Zeichencodes. Sie müssen sie in Saiten umwandeln.

Sie müssen eine Zeichenfolge aus den Zeichen erstellen.
Und geben Sie dann die Zeichenfolge zurück (tatsächlich eine Kopie der Zeichenfolge)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top