Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Teile eines Strings ersetzen (https://www.delphipraxis.net/5177-teile-eines-strings-ersetzen.html)

Taralos 26. Mai 2003 18:06


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:
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;
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.
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!

toms 26. Mai 2003 18:11

Zitat:

Ich habe einen String (eine mathematische Funktion) bei der jedes x in (x+0) umgewandelt werden soll
Warum nicht so?

Code:
StringReplace(eine_mathematische_Funktion, 'x', 'x+0', [rfReplaceAll]);

RomanK 26. Mai 2003 18:21

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 ...

Taralos 26. Mai 2003 18:31

@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:
Zeichenkette := Edit1.Text;
StringReplace(Zeichenkette, 'x', '(x+0)', [rfReplaceAll]);
panel4.caption := Zeichenkette;
Wenn ich x^2 eingebe kommt leider immer noch x^2 heraus.

toms 26. Mai 2003 18:52

Code:
Zeichenkette := Edit1.Text;
Zeichenkette := StringReplace(Zeichenkette, 'x', '(x+0)', [rfReplaceAll]);
panel4.caption := Zeichenkette;

Taralos 26. Mai 2003 19:04

Hui, das hat wunderbar funktioniert.

Vielen Dank!!!!

RomanK 26. Mai 2003 19:12

@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