Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie schaffe ich eine Stringmischung ohne Zufall (https://www.delphipraxis.net/196693-wie-schaffe-ich-eine-stringmischung-ohne-zufall.html)

LingNeu 10. Jun 2018 11:04

Wie schaffe ich eine Stringmischung ohne Zufall
 
Hallo Delphifreunde,
probiere schon eine zeitlang an folgendem Problem.
Möchte zwei Strings mischen:
z.B
String1 := 'Meier'; //der längere String gibt die Ergebnislänge vor
String2 := 'Hans';
LString1 := length(String1);
LString2 := length(String2);


Ergebnis1 := 'MHeainesr';
Ergebnis2 := 'HMaeniser';
Ich weiß einfach nicht, wie ich da anfangen kann.
Wahrscheinlich mit einer for schleife.
Könnte mir jemand bitte einen Hinweis geben. Danke!
ciao
Lingneu

KodeZwerg 10. Jun 2018 11:11

AW: Wie schaffe ich eine Stringmischung ohne Zufall
 
Was sollte denn rauskommen wenn Input String1 := 'Meier' und String2 := 'Hans' ist ? Gebe da mal ein Beispiel.
Delphi-Quellcode:
function DoJob(Input1, Input2: String): String
So wird ja irgendwie Deine Funktion beginnen, also was soll hinten rauskommen?

LingNeu 10. Jun 2018 11:22

AW: Wie schaffe ich eine Stringmischung ohne Zufall
 
hi Kodezwerg,
es sollen zwei Ergebnisse rauskommen

Ergebnis1 := 'MHeainesr';
Ergebnis2 := 'HMaeniser';

also, Der Name Meier wird gemischt mit Hans
als 1.Buchstabe M (von M eier),
als 2.Buchstabe H (von H ans)
als 3.Buchstabe e (von M e ier)
als 4.Buchstabe a (von H a ns)
als 5.Buchstabe i (von Me i er)
als 6.Buchstabe n (von Ha n s)
als 7.Buchstabe e (von Mei e r)
als 8.Buchstabe s (von Han s)
als 9.Buchstabe r (von Meie r)
Ergebnis: MHeainesr
Das Gleiche sollte dann mit Hans geschehen, er wird gemischt mit Meier
Gruß Lingneu

KodeZwerg 10. Jun 2018 11:25

AW: Wie schaffe ich eine Stringmischung ohne Zufall
 
Delphi-Quellcode:
function StringMix(Input1, Input2: String): String;
var
  i: Integer;
begin
  for i := 1 to Length(Input1) do
  begin
    Result := Result + Input1[i];
    if Length(Input2) >= i then Result := Result + Input2[i];
  end;
  for i := i to Length(Input2) do
    Result := Result + Input2[i];
end;
Teste das mal, QnD aber sollte das machen was Du möchtest.

edit
Ps: Eine Rückumwandlung ist ausgeschlossen falls das Deine nächste Frage dazu werden sollte.

LingNeu 10. Jun 2018 11:56

AW: Wie schaffe ich eine Stringmischung ohne Zufall
 
Vielen Dank!!!
Wie es aussieht, passt dies wunderbar.
Ich teste noch etwas, dann melde ich mich nochmals.
ciao
LingNeu

KodeZwerg 10. Jun 2018 12:10

AW: Wie schaffe ich eine Stringmischung ohne Zufall
 
Delphi-Quellcode:
function MixStringEnc(Input1, Input2: String): String;
var
  i: Integer;
begin
  Result := '';
  for i := 1 to Length(Input1) do
  begin
    Result := Result + Input1[i];
    if Length(Input2) >= i then Result := Result + Input2[i];
  end;
  Result := Result + Char($255);
  for i := i to Length(Input2) do
    Result := Result + Input2[i];
end;

procedure MixStringDec(Input: String; var Output1, Output2: String);
var
  i: Integer;
  Split: Boolean;
begin
  Split := False;
  Output1 := '';
  Output2 := '';
  i := 1;
  repeat
    if Input[i] = Char($255) then Split := True;
    if ((not Split)and(Input[i]<>Char($255))) then Output1 := Output1 + Input[i];
    if ((length(Input) >= i+1)and(Input[i+1]<>Char($255))) then Output2 := Output2 + Input[i+1];
    Inc(i,2);
  until i >= Length(Input);
end;
Hier ist eine Variante die Du auch wieder zurückverwandeln kannst, bei Anzeige vom kodierten musst Du das Char($255) rausfiltern oder tausche das Char($255) mit was auch immer Du magst aus, aber bedenke das es ohne diesen einen speziellen Trenner keine korrekte Rückverwandlung möglich ist!

So sieht es aus wenn man es Anwendet:
Delphi-Quellcode:
 Memo1.Lines.Add('');
 Memo1.Lines.Add(''+MixStringEnc('Hans','Meier'));
 MixStringDec(MixStringEnc('Hans','Meier'), tmp1, tmp2);
 Memo1.Lines.Add(''+tmp1+' <-> '+tmp2);
 Memo1.Lines.Add('');
 Memo1.Lines.Add(''+MixStringEnc('Meier','Hans'));
 MixStringDec(MixStringEnc('Meier','Hans'), tmp1, tmp2);
 Memo1.Lines.Add(''+tmp1+' <-> '+tmp2);
Zitat:

HMaeniseɕr
Hans <-> Meier

MHeainesrɕ
Meier <-> Hans
Ps: Gern geschehn :)

LingNeu 11. Jun 2018 10:56

AW: Wie schaffe ich eine Stringmischung ohne Zufall
 
hallo KodeZwerg

danke nochmals für Deinen Einsatz.
Deine Routine funktioniert bestens.
Da habe ich jetzt wieder mal was gelernt!
Deine anderen Routinen kann ich evtl. auch mal verwerten!

Beste Grüße
LingNeu

KodeZwerg 11. Jun 2018 11:22

AW: Wie schaffe ich eine Stringmischung ohne Zufall
 
Gern geschehen und mach wie Du magst, es sind Deine Routinen, ich half nur ein wenig Deine Gedanken in Code zu verfrachten :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 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