const char* verändern?
-
SeppJ schrieb:
Sone schrieb:
In C++ gehen beide Schreibweisen, da gibt es keinen Unterschied. In C ging nur eine.
Nein, das geht auch in C beides.
Wirklich? In C++ von A bis Z steht AFAIK was anderes. Ich krams mal raus, aber ich hab mich bestimmt nur falsch erinnert

Edit: Jup, er sagt nur, dass die eine in C sehr oft genutzt wurde.
-
Willst du hier ernsthaft JW als Quelle angeben? Das ist schon fast ein Beweis, dass es nicht so ist, wenn er das so schreibt.
-
Also hab das mal probiert, nachdem ich den String (const char*) mit der funktion geändert habe kann ich den neuen String, der ausgegeben halt anders aussieht, wieder verändern. (Funktion kopiert und Veränderung angepasst damit man den unterschied sieht)
Nur gammelt jetzt wirklich ein mit new angelegter Char*-String im Speicher rum. ..
-
ruhig_brauner schrieb:
Nur gammelt jetzt wirklich ein mit new angelegter Char*-String im Speicher rum. ..
Vielleicht sollst du auch zeigen, dass du std::string kennst.
-
Ich peil nicht was du überhaupt machen willst: Kannst du nicht einfach std::string verwenden und gut?
Die Aufgabenstellung ist wirr, sowas bekommst du sicher nicht beim Einstellungstest, du lieferst hier höchstwarscheinlich deine eigene Interpretation ab.
-
wenn ein const char* vorgegeben ist, werde ich doch net anfangen, das ding in ein string umzuwandeln. Ich weiß schließlich net, was man später damit machen will.

-
ruhig_brauner schrieb:
wenn ein const char* vorgegeben ist, werde ich doch net anfangen, das ding in ein string umzuwandeln. Ich weiß schließlich net, was man später damit machen will.

Kopf->Tisch
Das war nicht gemeint.
-
Sone du solltest aufhören deinen Kopf gegen den Tisch oder deine Hand zu hauen und die zeit investieren um zu erklären, was du meinst.

Es ist ein kleiner Teil des Quelltextes schon vorgeschrieben, unter anderem die Deklaration von zwei const char* -Elementen. Dann noch zwei Funktionen ohne Parameterübergabe, die ich füllen soll. Dann noch einen kleinen Dialog ergänzen. Das war es im großen und ganzen.
Ich hab dann halt mitbekommen, das man eigentlich keine const char*-Elemente ändern kann. Die Funktion löst das Problem, indem sie ein neues Element Erzeugt und nach Bearbeitung den alten Zeiger drauf umgelenkt. Schon hat sich das. Die Frage war nur, ob man sich das mit cast_const sparen kann.
Wie wäre euer Ansatz?
-
ruhig_brauner schrieb:
Wie wäre euer Ansatz?
Gib uns die genaue Aufgabenstellung, nicht bloß deine prosaische Interpretation. Hast du Code?
P.S.: const_cast ist sicherlich nicht die Lösung, sondern ist grob falsch.
-
Wie gesagt, die poste ich aus paranoiden gründen net, aber an sich hab ich nur die Variablen und so umgenannt.
Vorgabe:
class Myclass { public ersetze_H_mit_h_(...) { ... } }; int main() { const char* aendermich = "Hallo, hallo" // Ausgabe neuer und alter String }Augabe:
- ersetze_H_mit_h_(...) soll alle "H"s mit "h"s im String aendermich ersetzen.
- bei dem Kommentar // Ausgabe neuer und alter String soll der neue und der alte String ersetzt werdenDa sind noch andere Aufgaben, die hab ich raus gestrichen. Ich hab jetzt alles wichtige von der Formulierung ähnlich gelassen, der Quelltext ist fast identisch, andere Namen...
-
std::string ersetze_h_mit_H(char const* str) { std::string result(str); std::replace(result.begin(), result.end(), 'h', 'H'); return result; } int main() { const char* aendermich = "Hallo, hallo"; std::string geaendert = ersetze_h_mit_H(aendermich); std::cout << "Alt: " << aendermich; std::cout << "\nNeu: " << geaendert << '\n'; }Was ist an der Lösung inkorrekt? Wenn du Bock hast kannst du dir ja mit std::string::c_str einen const char* geben lassen ...
-
Nach dem was ich verstehe, soll ich "aendermich" verändern und keine neue Variable erzeugen. Ich nehme mal an mit std String-Objekten geht das auch, aber dann nimmt sich das sicher net mehr viel.
Geht die Umwandlung von string in c-string schnell? In die andere richtung ja anscheinend schon.

-
ruhig_brauner schrieb:
Nach dem was ich verstehe, soll ich "aendermich" verändern und keine neue Variable erzeugen.
Wie kommst du zu diesem Verständnis. Wenn du hinterher die alte Zeichenkette auch noch mit ausgeben sollst, widerspricht dies dieser Interpretation.
P.S.: Eine andere Herangehensweise wäre übrigens, ein "View"-Objekt zu erzeugen, welches gar keine Kopie der Zeichen macht, sondern on-demand eine veränderte Version der Zeichen gibt. Dies würde auch zu der gezeigten Signatur passen, eigentlich fast schon besser. Würde zu einer Firma passen, die starken Wert auf Design-Patterns und so legt.
-
Naja hab ja nur gesagt Dialog, hätte es vielleicht besser posten sollen...
cout << aendermich;
funktion(aendermich);
cout << aendermich;
-
ruhig_brauner schrieb:
cout << aendermich;
funktion(aendermich);
cout << aendermich;Solange aendermich auf ein String-Literal zeigt, ist deine die einzige richtige Lösung.
-
Aber jetzt mal aus reinem interesse (Und weil ich das so oder so irgendwann wissen muss^^)
Wie macht man aus einem string-Objekt wieder ein char*-String?
-
ruhig_brauner schrieb:
Wie macht man aus einem string-Objekt wieder ein char*-String?
Einen char*-String kannst du daraus gar nicht mehr machen, höchstens durch kopieren mit string::copy().
Aber du kannst ganz leicht einen Zeiger auf einen konstanten String bekommen (
char const*, bzw.const char*): Durch string::c_str().
-
Na ok, das wäre zumindest eine elegantere Lösung gewesen. Schade.

-
char *str = &mystring[0];
-
Bemerkung: Es ist nicht garantiert, dass str nullterminiert ist. Du musst vorher noch ein
mystring.push_back(0)machen.