Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "Überlappungen" zwischen zwei Strings (https://www.delphipraxis.net/204641-ueberlappungen-zwischen-zwei-strings.html)

Moombas 15. Jun 2020 09:25

AW: "Überlappungen" zwischen zwei Strings
 
Ich würde das nicht mal Zeichen genau machen in dem Fall.
Ich würde die Strings splitten und dann Wort für Wort vergleichen so lange es gleich ist.

1. Den ersten String zerteilen (Wortweise)
2. Dies von hinten nach vorne durchgehen und mit dem zweiten String (Wortweise, von vorne nach hinten) vergleichen
3. Sobald das mit den Worten nicht mehr passt, Stelle merken und aus der Schleife aussteigen.
4. Strings zusammenfügen.

Der schöne Günther 15. Jun 2020 09:33

AW: "Überlappungen" zwischen zwei Strings
 
Zitat:

Zitat von Gausi (Beitrag 1467291)
Relevant wird das ggf., wenn deine Strings DNA-Sequenzen sind

Und ich dachte immer das wird so gemacht:
https://xkcd.com/2298/


Zitat:

Zitat von Moombas (Beitrag 1467292)
Ich würde die Strings splitten und dann Wort für Wort vergleichen so lange es gleich ist

Ja, das würde ich tun. Bei sind es wirklich "Worte" die immer durch das gleiche Zeichen getrennt wären. Danke 👍

joachimd 15. Jun 2020 11:07

AW: "Überlappungen" zwischen zwei Strings
 
ich würde den ersten string von hinten und den zweiten von vorne nehmen - ich weiss, hört sich jetzt schweinisch an ;)

1. Erstes Zeichen vom zweiten String unter letztes Zeichen vom ersten legen
2. Überlappung vergleichen
3. Bei Gleichheit zweiten String um eines nach vorne schieben, goto 2
4. Bei Ungleichheit hat man den überlappenden Teil gefunden

Gausi 15. Jun 2020 11:17

AW: "Überlappungen" zwischen zwei Strings
 
Zitat:

Zitat von joachimd (Beitrag 1467312)
ich würde den ersten string von hinten und den zweiten von vorne nehmen - ich weiss, hört sich jetzt schweinisch an ;)

1. Erstes Zeichen vom zweiten String unter letztes Zeichen vom ersten legen
2. Überlappung vergleichen
3. Bei Gleichheit zweiten String um eines nach vorne schieben, goto 2
4. Bei Ungleichheit hat man den überlappenden Teil gefunden

Damit findest du aber ggf. nicht die komplette Überlappung.
Deine Methode würde in diesem Beispiel nur "ei" als Überlappung finden, denn der folgende Schleifendurchlauf mit "rei" und "ein" sorgt für den Abbruch.

Gewünscht wäre aber vermutlich "eins zwei drei".
Code:
ich zähle eins zwei drei
                      eins zwei drei wurde gezählt
Auch wenn das gekünstelt ist und die "Wortbedingung" hier auch verletzt ist. ;-)

Edit: bzw. würde man gar keine Überlappung finden, weil schon "i" und "e" ungleich sind.

Uwe Raabe 15. Jun 2020 12:51

AW: "Überlappungen" zwischen zwei Strings
 
Mit TStringHelper geht das recht überschaubar:
Delphi-Quellcode:
function ConcatNoOverlap(const A, B: string): string;
var
  I: Integer;
begin
  for I := Min(A.Length, B.Length) downto 1 do
    if string.Compare(A, A.Length - I, B, 0, I) = 0 then
      Exit(A.Remove(I-1) + B);
  Result := A + B;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr.
Seite 2 von 2     12   

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