Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Muster in String (https://www.delphipraxis.net/187420-muster-string.html)

Sir Rufo 29. Nov 2015 09:48

AW: Muster in String
 
So richtig explizit wurde es nicht gesagt, darum muss man hier ein wenig interpretieren.

Ein Muster wird dargestellt in einer Kombination aus Platzhaltern und Zeichen.
  • Delphi-Quellcode:
    *
    => 0-n Zeichen
  • Delphi-Quellcode:
    ?
    => genau ein Zeichen
Ein Muster das mit
Delphi-Quellcode:
*?
startet oder mit
Delphi-Quellcode:
?*
endet ist nicht zulässig.

Ein Muster liegt dann vor, wenn in einer gegebenen String-Menge in allen Strings Zeichen an einer beliebigen Stelle im gleichen Abstand vorkommen. Das Muster selber muss mindestens 2 Zeichen breit sein (Platzhalter werden nicht mitgezählt).

Beispiel:

Die gegebene String-Menge
Code:
1234567890
blhe1234j6
f1234k67id
und die (in allen Strings) vorkommenden Muster:
Code:
*12*
*1?3*
*1??4*
*123*
*1?34*
*12?4*
*1234*
*1????6*
*12???6*
...
*123??6*
*1234?6*
Das längste Muster ist das Muster, wo die Musterbreite abzüglich der Platzhalterzeichen ein Maximum aufweist. Dieses könnten aber auch mehrere Muster sein.

In dem Beispiel wäre das
Delphi-Quellcode:
*1234?6*

BUG 29. Nov 2015 10:00

AW: Muster in String
 
Zitat:

Zitat von BUG (Beitrag 1322841)
Ich hab bloß den Eindruck, das hier viele Muster lesen und dann gleich "Muster - Suchmuster - Regulärer Ausdruck" denken, während die Beispiele imho gar nicht so aussehen.

Zitat:

Zitat von Sir Rufo (Beitrag 1322843)
Ein Muster wird dargestellt in einer Kombination aus Platzhaltern und Zeichen.

Genau das meinte ich :tongue: :mrgreen:

Nicht jedes "Muster" was jemand finden möchte ist regulär, und dem TE geht es explizit um eine bestimmte Art von Gemeinsamkeiten zwischen zwei Strings, wobei die konkreten Zeichen nicht feststehen. Wahrscheinlich ist der Begriff "Muster" an der Stelle einfach irreführend.

Zitat:

Zitat von Monday (Beitrag 1322726)
Ich weiß nicht, welches Muster es ist oder wie lange, ich weiß nur das in beiden Strings eine Zeichenfolge/Muster (im Beispiel 123) gleich sind. Und möchte herausfinden, welcher es ist.


Zitat:

Zitat von Perlsau (Beitrag 1322842)
So lange der TE diese Definition nicht liefert, ist jeder weitere Kommentar dazu reinste Spekulation.

Jup, wobei es auch sein könnte das der TE auch nicht genau weiß was er eigentlich möchte :mrgreen:

Perlsau 29. Nov 2015 10:16

AW: Muster in String
 
Zitat:

Zitat von BUG (Beitrag 1322844)
Zitat:

Zitat von Perlsau (Beitrag 1322842)
So lange der TE diese Definition nicht liefert, ist jeder weitere Kommentar dazu reinste Spekulation.

Jup, wobei es auch sein könnte das der TE auch nicht genau weiß was er eigentlich möchte :mrgreen:

Diesem Eindruck kann ich mich ebenfalls nicht verschließen. Bei gefühlt 30% der Anfragen muß man erst einmal herauszufinden suchen, was der Fragesteller eigentlich erreichen möchte – und ich spreche jetzt nicht von den Fällen, in denen der Fragesteller mehr oder weniger absichtlich falsch verstanden wird oder dessen Thread in eine Richtung drängt, die stark von der Fragestellung abweicht und am Ende nichts mehr damit zu tun hat.

Selbstverständlich möchte ich hier keinem den Spaß & die Freude daran, sich über ein be- oder geliebtes Thema auszulassen, verderben :gruebel:
Die eigentliche, bislang unvollständige Frage wird auf diese Weise und ohne weitere Erklärungen des TE jedoch nicht wirklich einer Lösung nähergebracht :cyclops:

Monday 29. Nov 2015 10:26

AW: Muster in String
 
Jetzt hab ich was geschrieben, das wohl auch funktioniert. Vielleicht kann das auch jemand so gebrauchen:

Zum Testen eine Form mit Memo1 und Button1. Der . dient als Platzhalter.

Code:
function vergleich(erster,zweiter: string): string;
var
  a: integer;
begin
  Result := '';

  if length(erster) <> length(zweiter) then begin Result := ''; exit; end;

  for a := 1 to Length(erster) do begin
    if erster[a] = zweiter[a] then begin
      Result := Result+erster[a];
    end;
    if erster[a] <> zweiter[a] then begin
      Result := Result+'.';
    end;
  end;
end;

function mustersuche(erster, zweiter: string): string; // Eigentliche FUnktion
var
  a,max: integer;
  temp_zweiter,temp, anzeige,muster_temp: string;
begin
 temp := '';
 for a := 1 to Length(erster) do begin  temp := temp + '.'; end;

 temp_zweiter := temp + zweiter + temp;
 max := length(temp_zweiter)-length(temp);

  for a := 0 to max-1 do begin
     Delete(temp_zweiter, 1, 1);
     anzeige := Copy(temp_zweiter,1,length(temp));

     muster_temp := vergleich(erster,anzeige);
     muster_temp := StringReplace(muster_temp, '.', '', [rfReplaceAll, rfIgnoreCase]);
     if muster_temp <> '' then begin
       Form1.Memo1.Lines.Add(anzeige + ' Gefundenes Muster -> '+ vergleich(erster,anzeige)); // Nur Treffer ansehen
     end;
     //Form1.Memo1.Lines.Add(anzeige + ' Gefundenes Muster -> '+ vergleich(erster,anzeige)); //kompletten vorgang ansehen
  end;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
  mustersuche('a1b2cd3ef','ghi1j2kl3'); // ergibt => .1.2..3..
  mustersuche('a123bcdef','ghij123kl'); // ergibt => .123.....

  ShowMessage('Fertig');
end;

Monday 29. Nov 2015 10:38

AW: Muster in String
 
Ich wusste nicht das der Begriff "Muster" solche Verwirrungen auslöst. Es ist manchmal Schwierig es genau zu definieren, deshalb auch die Beispiele damit es einfacher ist zu verstehen. Ist Muster/Suchmuster/Gemeinsamkeiten/Kombinationen nicht einfach nur Begrifflichkeiten die in etwa dasselbe ausdrücken? Mir schien der Begriff Muster hier verständlich. Vielleicht könnte man diese Aufgabe auch mit regulären Ausdrücken lösen - ich weiß es nicht - dazu kenne ich mich mit regulären Ausdrücken zuwenig aus.

Namenloser 29. Nov 2015 18:31

AW: Muster in String
 
Erinnert mich an "diff", bloß mit einzelnen Zeichen statt Zeilen. "Longest common subsequence" wurde hier schon genannt und kommt auf das gleiche raus, aber ich wollte es trotzdem noch mal in den Raum werfen. Das Beispiel in dem verlinkten Abschnitt finde ich auch recht anschaulich. Du suchst im Grunde genau die Stellen, die dort freigelassen wurden.

D-User 29. Nov 2015 22:40

AW: Muster in String
 
apropos Muster:

suchen die bei Seti Project nicht auch ein Muster in einem etwas längeren String?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 Uhr.
Seite 3 von 3     123   

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