![]() |
Umwandeln eines Strings in einen Array (Stringanalyse)
Hi leute,
ich bin neu hier und ich hab mal gleich ein kleines Problem: erstmal zu dem Projekt, an dem ich grad arbeite: ich versuche gerade einen Taschenrechner mit stringanalyse zu erstellen. damit es leichter zu rechnen ist, will ich den string (die formel) in einen Array umwandeln. dabei ist dann jeder zweite eintrag eine Zahl und der rest sind dann operatoren. da es leider kann ich den Rückgabewert einer funktion nicht als array of string definieren. deshalb habe ich einen eigenen Typ definiert:
Delphi-Quellcode:
um den array zu erstellen benutze ich diese Funktion:
type TStringArray = array of String;
Delphi-Quellcode:
es lässt sich kompilieren, aber es kommt in der Zeile
function getStringArray(term : string):TStringArray ;
var stelle : char; i, platz :integer; komponennte :string; zahlarray : set of char; resultarray : TStringArray; begin // resultarray := array [0..10] of string; i := 1; platz := 0; stelle := ' '; zahlarray := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; while stelle <> '' do begin komponennte := ''; while term[i] in zahlarray do begin stelle := term[i]; komponennte := komponennte + stelle; i := i + 1 end; resultarray[platz] := komponennte; platz := platz + 1; while not (term[i] in zahlarray) do begin stelle := term[i]; komponennte := komponennte + stelle; i := i + 1 end; resultarray[platz] := komponennte; platz := platz + 1 end; result := resultarray end;
Delphi-Quellcode:
beim durchlaufen ein Fehler:
resultarray[platz] := komponennte;
Zitat:
ich hatte mir gedacht dass es davon kommt, dass ich die länge vom Array nicht definiert habe. also habe ich die kommentierte Zeile eingefügt. wenn ich diese einfüge, kommt beim kompilieren der Fehler Zitat:
und hinterher fürs rechnen muss der array komplett voll sein. ich hoffe, mir kann einer von euch helfen. xelax90 |
Re: Umwandeln eines Strings in einen Array (Stringanalyse)
Herzlich willkommen in der Delphi-PRAXiS, xelax90.
Du kannst erst dann erfogreich auf resultarray[platz] zugreifen, wenn du den benötigten Speicherplatz auch bereitgestellt hast:
Delphi-Quellcode:
Freundliche Grüße
Setlength(resultarray, Succ(platz));
resultarray[platz] := ... |
Re: Umwandeln eines Strings in einen Array (Stringanalyse)
genau sowas hab ich mir auch gedacht, aber was heißt Succ(platz) ??
|
Re: Umwandeln eines Strings in einen Array (Stringanalyse)
Zitat:
Delphi-OH: Unit System [...] In Delphi gibt Succ den Nachfolger des Arguments X zurück. X ist ein Ausdruck mit einem ordinalen Datentyp (einschließlich Int64). Der zurückgegebene Wert ist der Nachfolger von X und hat denselben Datentyp. Edit: Herzlich Willkommen in der DP! |
Re: Umwandeln eines Strings in einen Array (Stringanalyse)
danke,
das habe ich jetzt auch in der Hilfe gefunden, aber ich versteh immernoch nicht, was das mir bringt. soweit ich das verstehe, gibt es mir den darauffolgenden wert an (also würde, wenn ich succ(4) eingebe, 5 rauskommen oder??) das macht aber gar keinen sinn, weil die werte strings sind und keine integer oder char. |
Re: Umwandeln eines Strings in einen Array (Stringanalyse)
Zitat:
Schau Dir mal die Benennung der Variablen vom marabu an. Er wollte damit zeigen, dass Du zwei Variablen verwendest, Platz enthält dabei die Anzahl der Strings die Du schon gefunden hast, also wieviel Platz dein Array benötigt. Findest Du einen neuen String, den Du in das Array einfügen möchtest, dann erhöhst Du diesen Wert und vergrößerst das Array (Du benötigst einen weiteren Platz). Danach kannst Du an dieser Stelle etwas einfügen: Zitat:
Gruß Der Unwissende |
Re: Umwandeln eines Strings in einen Array (Stringanalyse)
oops :oops:
ich hab meinen eigenen code vergessen^^ ok, jetzt hab ich es endlich verstanden. und eigentlich muss es nicht am ende platz-1 heißen, weil platz gar nicht verändert wird. succ ist eine funktion. |
Re: Umwandeln eines Strings in einen Array (Stringanalyse)
Zitat:
Succ(X) ist das gleiche wie X + 1 und Pred(X) ist das gleiche wie X - 1 Also macht
Delphi-Quellcode:
und
Setlength(resultarray, Succ(platz));
Delphi-Quellcode:
das gleiche.
Setlength(resultarray, platz + 1);
Dies gilt ebenso für
Delphi-Quellcode:
und
resultarray[platz - 1] := ...
Delphi-Quellcode:
Das ganze ist aber nicht zu verwechseln mit inc(X) bzw. Dec(X). Denn das ist das gleiche wie X := X+1 bzw. X := X-1.
resultarray[Pred(platz)] := ...
|
Re: Umwandeln eines Strings in einen Array (Stringanalyse)
Erstmal :hi:
Abgesehen davon, dass du gar nicht ein "Resultarray" brauchst. Musst du ja sagen, wie viele Einträge dein "TStringArray" hat ;) Dazu musst du "SetLength(<Array>, <Länge des Arrays>)" aufrufen. D.h. du musst vor jedem "resultarray[platz] := ..." ein "SetLength(resultarray, platz + 1)" aufrufen. PS: Entgegen eurer Meinung, muss es "Platz" heißen, da er Platz mit "0" initialisiert. PPS: Ist das mit absicht "komponennte"? |
Re: Umwandeln eines Strings in einen Array (Stringanalyse)
das ganze soll wie gesagt ein Taschenrechner sein.
der soll dann sowas, wie gleichungen lösen können oder sowas in der Art.(ich hab bis donnerstag in 2 wochen Zeit^^). das ist erstmal der erste Anfang meines Arrays. jetzt habe ich einen viel besseren array, in dem jetzt auch Punkt vor strich berücksichtigt wird.(ich muss ihn nur noch auswerten) dann baue ich noch klammern ein und dann noch potenzen und und und...^^ also, wenn ich mehr fragen habe, wende ich mich vlt. wieder an euch. EIN GROßES DANKESCHÖN für die schnelle Hilfe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 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