AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichenketten nach Maske generieren

Ein Thema von jan17 · begonnen am 23. Feb 2011 · letzter Beitrag vom 23. Feb 2011
Antwort Antwort
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#1

AW: Zeichenketten nach Maske generieren

  Alt 23. Feb 2011, 19:49
Herzlich Willkommen in der Delphi-PRAXiS, jan17!

Mit der Idee, eine Rekursion einzusetzen, bist du schon einmal auf dem richtigen Weg.

Ich würde zunächst mit SetLength einen Ausgabestring in der Länge des Musters vorbereiten und dann die rekursive Routine zum ersten Mal aufrufen (Stufe 1). In der Routine wird das Zeichen des Musters für die aktuelle Rekursionstiefe betracthtet und eine zugehörige Menge von erlaubten Zeichen ermittelt (z.B. als TSysCharSet). Nun können nacheinnander alle Zeichen dieser Menge an die zur Rekursionstiefe gehörende Stelle des Ausgabestrings geschrieben werden. Nach jedem Schritt wird geprüft, ob bereits die letzte Rekursionstiefe erreicht wurde. Falls ja, wird der aktuelle Ausgabestring zur Lösungsmenge hinzugefügt, anderenfalls die Routine erneut aufgerufen, um die nächste Rekursionstiefe zu erreichen (Stufe n+1).

Ich hoffe, diese Beschreibung war nicht zu kompliziert. Die notwendigen Statements hast du ja zum Teil schon in deinem geposteten Quelltext verwendet. Vielleicht ist die Umsetzung ja nun gar nicht mehr so schwer.

Gruß Hawkeye
  Mit Zitat antworten Zitat
jan17

Registriert seit: 23. Feb 2011
2 Beiträge
 
#2

AW: Zeichenketten nach Maske generieren

  Alt 23. Feb 2011, 20:49
Hawkeye, ich weiss nicht, was ich sagen soll.
Als ich diese Frage gestellt habe, hätte ich niemals gedacht, dass ich es jemals selber schaffe.
Aber deine Beschreibung war so genial einfach, dass ich es gleich beim ersten Versuch geschafft habe.
Delphi-Quellcode:
  procedure a1(const mask:string);
  var s:string;

    procedure a2(n:byte);
    var c,c1,c2:char;
    begin
      if n >= length(mask)+1 then
        listbox1.Items.add(s)
      else
      begin
        case mask[n] of
          'l':
          begin
            c1:='a';
            c2:='z';
          end;
          'u':
          begin
            c1:='A';
            c2:='Z';
          end;
          'd':
          begin
            c1:='0';
            c2:='9';
          end;
        end;
        for c := c1 to c2 do
        begin
          s[n]:=c;
          a2(n+1);
        end;
      end;
    end;

  begin
    setlength(s,length(mask));
    a2(1);
  end;
Wie man sieht, ist noch lange nicht perfekt und es fehlt noch einiges, aber den Rest kriege ich auch noch hin.
Jedenfalls vielen Dank, dass du geantwortet hast!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 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