Folgendes schlägt mit dem Fehler fehl prog.cpp:5:13: error: invalid conversion from ‘char’ to ‘const char*’
int main()
{
char d = 'd';
std::string y("Hello worl");
y.append(d); // Line 5 - this fails
std::cout << y;
return 0;
}
Ich habe auch Folgendes versucht, das kompiliert, sich aber zur Laufzeit zufällig verhält:
int main()
{
char d[1] = { 'd' };
std::string y("Hello worl");
y.append(d);
std::cout << y;
return 0;
}
Entschuldigung für diese dumme Frage, aber ich habe mich bei Google umgesehen. Was ich sehen konnte, sind nur "char array to char ptr", "char ptr to char array" usw.
Antworten:
Ich würde
+=
Operator anstelle von benannten Funktionen verwenden.quelle
gcc
,basic_string::operator+=
ist nur ein Anruf inpush_back
.y
es einchar*
statt iststd::string
. Es würded
dem Zeiger y Zeichen hinzufügen .Verwendung
push_back()
:quelle
Um einem std :: string var mit der append-Methode ein Zeichen hinzuzufügen, müssen Sie diese Überladung verwenden:
Bearbeiten: Sie haben Recht, ich habe den Parameter size_type, der in der Kontexthilfe angezeigt wird, falsch verstanden. Dies ist die Anzahl der hinzuzufügenden Zeichen. Der richtige Anruf ist also
nicht
Oder der einfachste Weg:
quelle
sizeof(char)
statt1
? Sie möchten genau eine Wiederholung von anhängend
, also sagen Sie das einfach. Die Verwendungsizeof
hier ist irreführend, da dies darauf hindeutet, dassappend
die Bytegröße des verwendeten Datentyps angegeben werden muss (was nicht der Fall ist).Zusätzlich zu den anderen erwähnten nimmt einer der String-Konstruktoren ein Zeichen und die Anzahl der Wiederholungen für dieses Zeichen. Damit können Sie ein einzelnes Zeichen anhängen.
quelle
Ich teste die verschiedenen Sätze, indem ich sie in eine große Schleife laufe. Ich habe Microsoft Visual Studio 2015 als Compiler verwendet und mein Prozessor ist ein i7, 8Hz, 2GHz.
Nach diesem Test sind die Ergebnisse:
Fazit
+=
scheint verständlicher, aber wenn Sie sich für Geschwindigkeit interessieren, verwenden Sie Anhängenquelle
Versuchen , den Operator + = Link - Text , append () Methode Link - Text oder push_back () Methode Link - Text
Die Links in diesem Beitrag enthalten auch Beispiele für die Verwendung der jeweiligen APIs.
quelle
das Problem mit:
ist, dass Sie das 'd' haben müssen, anstatt einen Namen eines Zeichens zu verwenden, wie char d = 'd'; Oder liege ich falsch?
quelle
char c = 'd'
und ich kanny.push_back(c)
ohne Probleme auskommen. Es gibt also kein Problem mitstd::string::push_back()
(außer dass es länger ist als+=
).Beachten Sie, dass Sie in all diesen Beispielen ein Zeichenliteral direkt hätten verwenden können :
y += 'd';
.Ihr zweites Beispiel hätte aus nicht verwandten Gründen fast funktioniert.
char d[1] = { 'd'};
hat nicht funktioniert, aberchar d[2] = { 'd'};
(beachten Sie, dass das Array die Größe zwei hat) hätte ungefähr genauso funktioniert wieconst char* d = "d";
, und ein String-Literal kann angehängt werden :y.append(d);
.quelle
Versuchen Sie, das d als Zeiger y.append (* d) zu verwenden.
quelle
char
keine Zeichenfolge ist und keinen Nullterminator hat. Dies führt zu undefiniertem Verhalten.*d
bedeutet Referenzreferenzzeiger,d
der ein Syntaxfehler ist, da erd
kein Zeiger ist.Beachten Sie, dass ich 10u und nicht 10 geschrieben habe, wie oft ich das Zeichen anhängen möchte. Ersetzen Sie 10 durch eine beliebige Zahl.
quelle
Ich habe einen einfachen Weg gefunden ... Ich musste
char
eine Schnur anheften , die im laufenden Betrieb gebaut wurde. Ich brauchte eine,char list;
weil ich dem Benutzer eine Auswahl gab und diese Auswahl in einerswitch()
Anweisung verwendete.Ich habe einfach eine weitere hinzugefügt
std::string Slist;
und die neue Zeichenfolge gleich dem Zeichen "Liste" gesetzt - a, b, c oder was auch immer der Endbenutzer so auswählt:Komplexität mag cool sein, aber Einfachheit ist cooler. meiner bescheidenen Meinung nach
quelle
Hinzufügen einer Einfügeoption, wie noch nicht erwähnt.
quelle
Wenn Sie push_back verwenden, wird der String-Konstruktor nicht aufgerufen. Andernfalls wird durch Casting ein Zeichenfolgenobjekt erstellt und das Zeichen in dieser Zeichenfolge zur anderen Zeichenfolge hinzugefügt. Zu viel Ärger für einen winzigen Charakter;)
quelle