AGB  ·  Datenschutz  ·  Impressum  







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

Enthält Array1 das Array2?

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

Registriert seit: 9. Jan 2004
Ort: Barsbüttel
317 Beiträge
 
Delphi 6 Personal
 
#1

Enthält Array1 das Array2?

  Alt 25. Feb 2007, 17:46
Hallo,

ich stehe gerade etwas auf dem Schlauch.

Ich möchte überprüfen, ob alle Elemente eines Arrays in genau dieser Reihenfolge in einem anderen, größeren Array vorkommen. Beispiel:

Code:
Großes Array:
[A, B, C, D, E, F]

Kleines Array (1):
[C, D, E] => true

Kleines Array (2):
[C, D, F] => false

Kleines Array (3):
[E, F, G] => false
Wie geht das?

Danke,
Dominik
Dominik Peters
  Mit Zitat antworten Zitat
Der_Unwissende

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

Re: Enthält Array1 das Array2?

  Alt 25. Feb 2007, 18:18
Zitat von Kinimod8:
Ich möchte überprüfen, ob alle Elemente eines Arrays in genau dieser Reihenfolge in einem anderen, größeren Array vorkommen.
Hi,
da kannst Du auf verschiedene Ansätze zurück greifen. Als erstes (am wenigsten Elegant, nicht gerade schnell, aber sehr einfach) könntest Du die Arrays in Strings umwandeln und auf die Funktion Pos zurückgreifen. Diese sucht einen Teilstring in einem anderen String.
Besser ist es wenn Du auf einen String-Matching-Algorithmus zurückgreifst. String-Matching ist hier zwar nicht das was Du suchst, aber die Idee lässt sich eigentlich leicht auf andere Datentypen übertragen. Schau einfach mal nach Bei Google suchenRabin Karp oder noch besser Bei Google suchenKnuth Morris Pratt

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Enthält Array1 das Array2?

  Alt 25. Feb 2007, 18:41
Oder Bei Google suchenBoyer Moore, wobei man sich auch gut auf die (leichter zu implementierende) Bad-Character-Regel beschränken kann.
  Mit Zitat antworten Zitat
DBR

Registriert seit: 19. Jul 2005
43 Beiträge
 
#4

Re: Enthält Array1 das Array2?

  Alt 25. Feb 2007, 18:59
Delphi-Quellcode:
var
  Grosses: array[0..5] of char = ('A', 'B', 'C', 'D', 'E', 'F');
  Kleines1: array[0..2] of char = ('C', 'D', 'E');
  Kleines2: array[0..2] of char = ('C', 'D', 'F');
  Kleines3: array[0..2] of char = ('E', 'F', 'G');

function KinG(K, G: array of char): boolean;
begin
  result := pos(K, G) > 0;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
  if KinG(Kleines2, Grosses) then showmessage('Gross enthält Klein1')
  else showmessage('nicht gefunden');
end;


//--------------------- Allgemein --------------------

type
  art = Integer; // für diesen Fall

var
  Grss: array[0..5] of art = (1, 13, 33, 125, 2, 77);
  Kl1: array[0..2] of art = (33, 125, 2);
  Kl2: array[0..2] of art = (33, 125, 77);
  Kl3: array[0..2] of art = (2, 77, 444);

function KinGx(K, G: array of art): boolean;
var
  se, sg, sk: integer;
  A, P: PChar;
begin
  sg := sizeof(G);
  sk := sizeof(K);
  se := sizeof(G[0]);
  P := @G;
  A := P;
  repeat
    result := comparemem(@K, P, sk);
    if result then break;
    inc(P, se);
  until P - A > sg - sk;
end;

procedure TForm2.Button4Click(Sender: TObject);
begin
  if KinGx(Kl2, Grss) then showmessage('Gross enthält Klein1')
  else showmessage('nicht gefunden');
end;
  Mit Zitat antworten Zitat
Kinimod8

Registriert seit: 9. Jan 2004
Ort: Barsbüttel
317 Beiträge
 
Delphi 6 Personal
 
#5

Re: Enthält Array1 das Array2?

  Alt 25. Feb 2007, 19:09
Vielen Dank schon mal an alle, insbesondere an DBR für das Codebeispiel. Muss das jetzt erstmal verdauen
Dominik Peters
  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 07:45 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