Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Überprüfung: Wiederholung von Zeichenketten im String (https://www.delphipraxis.net/74777-ueberpruefung-wiederholung-von-zeichenketten-im-string.html)

Scorpion 8. Aug 2006 17:12


Überprüfung: Wiederholung von Zeichenketten im String
 
Hallo,

ich muß einen String auf eine Wiederholung von Zeichenketten überprüfen. Das heisst in diesem Fall, eine Zeichenkette, darf nicht direkt nacheinander folgen, also

BB wäre falsch BAB ok
BABAB falsch und BABCAB ok
BANANE falsch, da ANAN vorkommt

habt ihr eine Idee, wie man das machen könnte ?

Vielen Dank

Nikolas 8. Aug 2006 17:17

Re: Überprüfung: Wiederholung von Zeichenketten im String
 
Leg für jede Zeichenfolge eine Liste an, in der du die Positionen des Substrings notierst. Dann schaust du in der Liste, ob zwei benachbarte Positionen weiter als die Länge des Substrings auseinanderliegen:
Bsp:
BlaBla

erster String: 'B' Positionen: 1,4; Länge des Strings: 1. 1+1<4 -> Treffer
n.ter string: 'Bla' Positionen: 1,4, Länge:3 . 1+3=4 -> Kein Treffer

HERMES 8. Aug 2006 17:21

Re: Überprüfung: Wiederholung von Zeichenketten im String
 
Überleg dir eine passende Grammatik dazu und dann überprüf (möglicherweise mit CYK) ob dein Wort mit der Grammatik dargestellt werden kann.

Scorpion 8. Aug 2006 17:32

Re: Überprüfung: Wiederholung von Zeichenketten im String
 
@Toxman: Aber das müsste ich ja mit allen Substring aller möglichen Längen machen, ist das nicht zu Speicheraufwändig?

@HERMES: Hättest du eine Idee, wie das aussehen könnte?

HERMES 8. Aug 2006 17:36

Re: Überprüfung: Wiederholung von Zeichenketten im String
 
Da musst du dir mal die Chomsky Hirachie ( / Formale Sprachen ) anschauen, und dann kannst du in Abhängigkeit der hirachischen Stufe deiner Grammatik eine passende Möglichkeit finden deinen Input zu überprüfen.

Hawkeye219 8. Aug 2006 19:53

Re: Überprüfung: Wiederholung von Zeichenketten im String
 
Hallo Nico,

hier ist mein Versuch:

Delphi-Quellcode:
function CheckString (const s: string): Boolean;
var
  idx, len: Integer;
begin
  Result := False;
  for idx := 1 to Length(s) - 1 do
    for len := 1 to (Length(s) + 1 - idx) div 2 do
      if CompareMem(@s[idx], @s[idx + len], len) then
        Exit;
  Result := True;
end;
Gruß Hawkeye

Scorpion 9. Aug 2006 10:53

Re: Überprüfung: Wiederholung von Zeichenketten im String
 
@Hawkeye219: Ja, vielen Dank, der Code funktioniert super...

An alle anderen trotzdem auch vielen Dank für die Tips :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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 by Thomas Breitkreuz