AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Umwandeln eines Strings in einen Array (Stringanalyse)
Thema durchsuchen
Ansicht
Themen-Optionen

Umwandeln eines Strings in einen Array (Stringanalyse)

Ein Thema von xelax90 · begonnen am 25. Feb 2007 · letzter Beitrag vom 25. Feb 2007
Antwort Antwort
xelax90

Registriert seit: 25. Feb 2007
Ort: Düsseldorf
14 Beiträge
 
#1

Umwandeln eines Strings in einen Array (Stringanalyse)

  Alt 25. Feb 2007, 16:17
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:

type TStringArray = array of String; um den array zu erstellen benutze ich diese Funktion:
Delphi-Quellcode:
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;
es lässt sich kompilieren, aber es kommt in der Zeile
resultarray[platz] := komponennte; beim durchlaufen ein Fehler:
Zitat:
Zugriffsverletzung bei Adresse 004042A0 in Modul 'Taschenrechner.exe'.Schreiben von Adresse 00000000

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:
Ausdruck erwartet, aber array gefunden.
außerdem weiß ich nicht von forne herein, wie lang der array wird. es soll ja nicht jedes Zeichen in den Array rein.
und hinterher fürs rechnen muss der array komplett voll sein.

ich hoffe, mir kann einer von euch helfen.

xelax90
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Umwandeln eines Strings in einen Array (Stringanalyse)

  Alt 25. Feb 2007, 16:34
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:
Setlength(resultarray, Succ(platz));
resultarray[platz] := ...
Freundliche Grüße
  Mit Zitat antworten Zitat
xelax90

Registriert seit: 25. Feb 2007
Ort: Düsseldorf
14 Beiträge
 
#3

Re: Umwandeln eines Strings in einen Array (Stringanalyse)

  Alt 25. Feb 2007, 16:46
genau sowas hab ich mir auch gedacht, aber was heißt Succ(platz) ??
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Umwandeln eines Strings in einen Array (Stringanalyse)

  Alt 25. Feb 2007, 16:51
Zitat von xelax90:
genau sowas hab ich mir auch gedacht, aber was heißt Succ(platz) ??
Setze in der Delphi-IDE den Caret auf "succ" und drücke F1, das wirkt manchmal Wunder:

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!
  Mit Zitat antworten Zitat
xelax90

Registriert seit: 25. Feb 2007
Ort: Düsseldorf
14 Beiträge
 
#5

Re: Umwandeln eines Strings in einen Array (Stringanalyse)

  Alt 25. Feb 2007, 17:50
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.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: Umwandeln eines Strings in einen Array (Stringanalyse)

  Alt 25. Feb 2007, 18:09
Zitat von xelax90:
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.
Hi, (und auch von mir nochmal ein Willkommen in der DP ).
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 von marabu:
Delphi-Quellcode:
Setlength(resultarray, Succ(platz)); // Vergrößern des Arrays
resultarray[platz-1] := ... // Zugriff auf die neue Stelle (ACHTUNG, es sollte Platz - 1 heißen!)
Platz kannst Du einfach mit 0 initialisieren (einmal ganz am Anfang den Wert 0 zuweisen).

Gruß Der Unwissende
  Mit Zitat antworten Zitat
xelax90

Registriert seit: 25. Feb 2007
Ort: Düsseldorf
14 Beiträge
 
#7

Re: Umwandeln eines Strings in einen Array (Stringanalyse)

  Alt 25. Feb 2007, 18:16
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.
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Umwandeln eines Strings in einen Array (Stringanalyse)

  Alt 25. Feb 2007, 18:57
Zitat von marabu:
Delphi-Quellcode:
Setlength(resultarray, Succ(platz)); // Vergrößern des Arrays
resultarray[platz-1] := ... // Zugriff auf die neue Stelle (ACHTUNG, es sollte Platz - 1 heißen!)
Noch kurz zu Succ:
Succ(X) ist das gleiche wie X + 1
und
Pred(X) ist das gleiche wie X - 1

Also macht
Setlength(resultarray, Succ(platz)); und Setlength(resultarray, platz + 1); das gleiche.
Dies gilt ebenso für
resultarray[platz - 1] := ... und resultarray[Pred(platz)] := ... 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.
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Umwandeln eines Strings in einen Array (Stringanalyse)

  Alt 25. Feb 2007, 19:13
Erstmal

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"?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
xelax90

Registriert seit: 25. Feb 2007
Ort: Düsseldorf
14 Beiträge
 
#10

Re: Umwandeln eines Strings in einen Array (Stringanalyse)

  Alt 25. Feb 2007, 21:36
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
  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 08:30 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