![]() |
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:
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:
und die (in allen Strings) vorkommenden Muster:
1234567890
blhe1234j6 f1234k67id
Code:
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.
*12*
*1?3* *1??4* *123* *1?34* *12?4* *1234* *1????6* *12???6* ... *123??6* *1234?6* In dem Beispiel wäre das
Delphi-Quellcode:
*1234?6*
|
AW: Muster in String
Zitat:
Zitat:
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:
|
AW: Muster in String
Zitat:
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: |
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; |
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.
|
AW: Muster in String
Erinnert mich an
![]() |
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 01:42 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