![]() |
Teile eines Strings ersetzen
Hallo, habe folgendes Problem, dass ich einfach nicht lösen kann:
Ich habe einen String (eine mathematische Funktion) bei der jedes x in (x+0) umgewandelt werden soll. Dazu habe ich folgenden Quelltext geschrieben:
Code:
Ich stelle also die Zeichenanzahl des Wortes fest, und suche jeden Char ab ob es ein X ist und will dies gegebenenfalls in (x+0) umwandeln. Nach der Umwandlung soll r um 2 erhöht werden weil er ja sonst immer wieder ein x finden würden. Ansonsten wird x um 1 erhöht damit er den Rest durchsucht.
Stringlaenge := length(Zeichenkette);
r := 1; repeat if Zeichenkette[r] = 'x' then begin delete (Zeichenkette,r,1); insert ('(x+0)',Zeichenkette,r); r := r +2; end else r := r+1; until r = Stringlaenge; Jetzt tritt folgendes Problem auf: Bei 3*x^2 funktioniert alles wunderprächtig. Das wird zu 3*(x+0)^2. Steht x jedoch am Anfang, also z.b. x oder x^2 wird es nicht umwandelt. Dort passiert gar nichts. Das selbe passiert wenn x am Ende steht, also z.b. 3^x. Was mache ich falsch, dass der Anfang und das Ende nicht überprüft werden? Ich hoffe ihr könnt mir helfen. Edit: Habe gerade festgestellt, dass es funktioniert wenn x am Anfang steht. Es funktioniert nur nicht wenn X am Ende steht. Vielleicht stimmt etwas mit meiner Abbruchbedingung nicht? Thx! |
Zitat:
Code:
StringReplace(eine_mathematische_Funktion, 'x', 'x+0', [rfReplaceAll]);
|
Hoi,
vielleicht liegt es daran das der String zur Laufzeit längert wird und du die Länge des Strings am Anfang Festlegst, also bis dahin wo gearbeitet werden soll ... |
@FuckRacism: Aber ich lege ja vorher fest das Zeichenkette := Edit1.text;
Danach bestimme ich die Länge des Strings mit StringLaenge := Length(Zeichenkette); Da dürfte doch nichts falsches dran sein oder? @Toms: Ich habe es probiert, aber das hat leider nicht funktioniert, obwohl ich nicht weiß warum nicht.... Hier mein verändertet Quelltext:
Code:
Wenn ich x^2 eingebe kommt leider immer noch x^2 heraus.
Zeichenkette := Edit1.Text;
StringReplace(Zeichenkette, 'x', '(x+0)', [rfReplaceAll]); panel4.caption := Zeichenkette; |
Code:
Zeichenkette := Edit1.Text;
Zeichenkette := StringReplace(Zeichenkette, 'x', '(x+0)', [rfReplaceAll]); panel4.caption := Zeichenkette; |
Hui, das hat wunderbar funktioniert.
Vielen Dank!!!! |
@Taralos
Ja, aber wenn du davor, also vor dem x am ende, schon ein x ersetzt dann veränderst du die länge des String die du davor in den Integer gespeichert hast. z.B: 4+5*3*x^4+4^x (length= 13) dann : 4+5*3*(x+0)^4+4^x (length = 17) jetzt wir nur noch bis zum 13 Zeichen durchsucht da du ja am anfang die Länge des ersten Strings gepeichert hast. Lange Rede kurzer Sinn, mach einfach so:
Delphi-Quellcode:
until r = length(Zeichenkette);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz