AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Teile eines Strings ersetzen

Ein Thema von Taralos · begonnen am 26. Mai 2003 · letzter Beitrag vom 26. Mai 2003
Antwort Antwort
Taralos

Registriert seit: 28. Mär 2003
18 Beiträge
 
#1

Teile eines Strings ersetzen

  Alt 26. Mai 2003, 18:06
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!
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2
  Alt 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]);
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#3
  Alt 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 ...
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Taralos

Registriert seit: 28. Mär 2003
18 Beiträge
 
#4
  Alt 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.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5
  Alt 26. Mai 2003, 18:52
Code:
Zeichenkette := Edit1.Text;
Zeichenkette := StringReplace(Zeichenkette, 'x', '(x+0)', [rfReplaceAll]);
panel4.caption := Zeichenkette;
Thomas
  Mit Zitat antworten Zitat
Taralos

Registriert seit: 28. Mär 2003
18 Beiträge
 
#6
  Alt 26. Mai 2003, 19:04
Hui, das hat wunderbar funktioniert.

Vielen Dank!!!!
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#7
  Alt 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:
until r = length(Zeichenkette);
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz