Gibt es eine Möglichkeit, Teile von Strings neu zu beschreiben, ohne das man nach bestimmten Zeichen suchen muss?
Die Zeichen stehen immer an der selben Stelle, können aber unterschiedliche Zeichen haben.
Beispiel: Zeit1: 00:00:00
Möchte die unterstrichenen Nullen ändern. Dort können jedoch auch andere Zahlen stehen, so dass ich nicht nach den Nullen suchen kann.
Strings kann man gar nicht ändern.
Wenn man genug RAM hat, kann man neue erzeugen und die alten wegschmeissen.
String A= "alt";
A += String("er String"); // A ist jetzt ein neuer String mit dem Text "alter String";
// die Strings "alt" und "erString" liegen jetzt auf dem Müll.
//So geht es einfach:
// 012345678901234
char veraenderbar[] = "Zeit: 00:00:00";
veraenderbar[6] = '1' ;// Text ist jetzt "Zeit: 10:00:00"
Etwas trickreicher wird es, wenn man strcat oder strcpy verwendet, weil dann am Ende noch die String-Ende-Kennung eingefügt wird.
Ich glaube, mal gelesen zu haben, dass man über Zeiger oder Referenzen oder sowas auch auf die interne Struktur von Stringobjekten zugreifen und dann einzelne Bytes ändern kann.
Nein. Mit c_str() bekommst du nur einen const Zeiger. Also nur Lese-Zugriff. Es wäre Irrsinn wenn man darüber das interne Array ändern könnte, da das String Objekt ja auch die Länge des Arrays in einer Variable verwaltet.
Man kann ein einzelnes Zeichen ändern. Das ist alles. Das würde hier aber wohl reichen:
Der Subskript Operaptor ist überladen, also ist das eigentlich auch nicht anders wie bei C Strings. Aber wie so oft kann man mit char Arrays mehr machen.
Der [] Operator ist überladen, das stimmt. Und zwar so:
class String {
...
char operator [] (unsigned int index) const;
char& operator [] (unsigned int index);
...
}
Mit der 2. Variante ist es tatsächlich möglich, in einem String einzelne Zeichen zu ändern!
Unsauber, aber praktisch, wenn es denn unbedingt ein String sein muss.
Man lernt nie aus, Danke Serenifly.
P:S: Es gibt noch ein paar Methoden (im Abschnitt modification ), die einen String verändern, statt eine Kopie zu erstellen:
toLowerCase();
replace(char find, char replace);
Als Merksatz ist "Strings kann man garnicht ändern" zwar nicht ganz richtig, aber trotzdem markant
michael_x:
Der [] Operator ist überladen, das stimmt. Und zwar so:
class String {
...
char operator [] (unsigned int index) const;
char& operator [] (unsigned int index);
...
}
Mit der 2. Variante ist es tatsächlich möglich, in einem String einzelne Zeichen zu ändern!
Unsauber, aber praktisch, wenn es denn unbedingt ein String sein muss.
Hab ich mich doch richtig erinnert. Weil der TO will ja nur einzelne Zeichen ersetzen.
Aber besser gar nicht erst aus Bequemlichkeit mit Stringobjekten anfangen.