Kombination der Groß-Klein Buchstaben
Unter Unix sind ja namen wie "Datei" und "DatEi" unterschiedlich.
Wie kann ich also per algorhytmus alle Kombination heraus finden? Heißt für: "aaa" gibt es die Möglichkeiten => "Aaa", "aAa", "aaA", "aAA", "AAA", "AAa", "AaA", "aaa". Mir gehen langsam die Ideen aus.. das hatte ich bisher, bringt mir aber nur einen Teilen der möglichkeiten und dann noch doppelt:
Delphi-Quellcode:
Vielleicht gibt ja schon eine Lösung, habe leider über die Suchfunktion nichts gefunden.
name:= 'aaa';
For i:=1 to Length(name) do begin Sub:= Copy(name,i,1); dahinter:= Copy(name, i+1,Length(name)-i+1); davor:= Copy(name, 1, i-1); chars[i-1]:= sub; charsend[i-1]:=dahinter; charsbegin[i-1]:= davor; end; For i:=0 to Length(name)-1 do begin SetLength(triesup,Length(triesup)+1); triesup[i]:= charsbegin[i] + AnsiLowerCase(chars[i]) + charsend[i]; end; For i:=0 to Length(name)-1 do begin SetLength(triesdown,Length(triesdown)+1); triesdown[i]:= charsbegin[i] + AnsiUpperCase(chars[i]) + charsend[i]; end; Kann ja sein das einer von euch eine Idee hat. Viele Grüße! |
Re: Kombination der Groß-Klein Buchstaben
Wozu willst du denn alle Möglichkeiten auflisten?
|
Re: Kombination der Groß-Klein Buchstaben
Würde mich auch mal interessieren, zumal das sehr schnell sehr viele Möglichkeiten (schlimmstenfalls 2^Stringlänge) werden.
|
Re: Kombination der Groß-Klein Buchstaben
Permutation
Letztlich geht es darum. Man könnte z.B. alle binären Permutationen der Länge n generieren und dann als Maske für die Groß- und Kleinschreibung des Strings verwenden. Nur so als Idee. |
Re: Kombination der Groß-Klein Buchstaben
Zitat:
Test esTt setT sTet usw.. Ich möchte das gerne haben, da bei einer Regestrierung von einem Account jede Kombination gewählt werden kann. Allerdings möchte ich (da es von extern kommt) innerhalb meines Programmes, alle Möglichkeiten auflisten und somit auf bestimmte Dateien hinweisen. Dies ist leider mit "AniLowerCase" oä nicht möglich. *Ist ein wenig kompliziert das zu erklären*. Wird also ein Name eingegeben möchte ich in einem Array alle anderen Kombination ausschließen. //Hinzugefügt: Zitat:
:drunken: |
Re: Kombination der Groß-Klein Buchstaben
Ich verstehe das ehrlich gesagt nicht so ganz. Erklär das nochmal genau, da gibts bestimmt eine bessere Möglichkeit, als alle Möglichkeiten aufzulisten.
|
Re: Kombination der Groß-Klein Buchstaben
Zitat:
Beispiel Online Spiel: Du kannst dir einen Nicknamen erstellen. Jetzt könnte sich aber einer "Admin" nennen und somit die anderen Spieler "reinlegen". Das Spiel Speichert für jeden Nicknamen auf den Server eine Datei. Es soll weiterhin möglich sein, seinen Nicknamen einmal "Player" zu wählen und ein anderes mal "player". Nun gibt es eine Blacklist von Namen, die man nicht nehmen darf. Wäre ja doof wenn dann einer ankommt und sich "AdMin" nennt. Auf das Datenvolumen kommt es nicht an.. //€dit: Also ich möchte gerne Einträge für die Blacklist festlegen/vorschlagen. Ich hoffe ich konnte es jetzt verständlich ausdrücken! |
Re: Kombination der Groß-Klein Buchstaben
Zitat:
Zitat:
|
Re: Kombination der Groß-Klein Buchstaben
Zitat:
|
Re: Kombination der Groß-Klein Buchstaben
Wenn die Liste case-sensitive ist, macht der Satz
Zitat:
|
Re: Kombination der Groß-Klein Buchstaben
Delphi-Quellcode:
Womöglich stimmen nicht alle Aufrufe, aber das Prinzip müsste so richtig umgesetzt sein ;)
procedure PermuteCase(const s: string; list: TString; startIndex: Integer := 0);
var temp: string; begin if startIndex > length(s) then exit; if startIndex = 0 then begin temp := lowercase(s); startIndex := 1; end else temp := s; list.Add(temp); PermuteCase(temp, list, startIndex + 1); temp[startIndex] := upper(temp[startIndex]); list.Add(temp); PermuteCase(temp, list, startIndex + 1); end; |
Re: Kombination der Groß-Klein Buchstaben
Zitat:
Wieso? Blacklist: Zitat:
Sonst würde ja (wenn nicht Ccase-sensitive) die Angabe "admin" in der Blacklist alle Möglichkeiten auschließen (zb. "Admin", "ADMIN", usw.). Leider kann ich die Blackliste auch nicht Beeinflussen, da es ein externes Programm ist, und ich sozusagen nur das Programm zur erweiterung jener schreiben möchte. |
Re: Kombination der Groß-Klein Buchstaben
AdMin ist aber auch möglich und das ist ja angeblich doof :gruebel:
|
Re: Kombination der Groß-Klein Buchstaben
Zitat:
Ich hab jetzt das Beispiel von Dax mal abgewandelt. Es waren ein paar Syntax Fehler drin. Sah mir am Anfang stark nach ner Endlosschleife aus, aber jetzt bekomme ich eine Zugriffverletzung für meine Stringlist (fals dies mit TStrings gemeint war).
Delphi-Quellcode:
procedure PermuteCase(const s: string; list: TStringList; startIndex: Integer = 0);
var temp,charf: String; begin if startIndex > length(s) then exit; if startIndex = 0 then begin temp := lowercase(s); startIndex := 1; end else temp := s; list.Add(temp); //PermuteCase(temp, list, startIndex + 1); charf:= uppercase(temp[startIndex]); temp[startIndex] := charf[1]; list.Add(temp); PermuteCase(temp, list, startIndex + 1); end; |
Re: Kombination der Groß-Klein Buchstaben
Jetzt bin ich völlig verwirrt. Sollen nun alle Groß-/Kleinschreibungskombinationen der Blacklist geblockt werden?
|
Re: Kombination der Groß-Klein Buchstaben
Zitat:
|
Re: Kombination der Groß-Klein Buchstaben
Dann mach doch Deine Blacklist komplett in Kleinschreibung, wandele den Usernamen auch mit AnsiLowerCase um und schau mit IndexOf nach, ob dieser in der Blacklist enthalten ist.
|
Re: Kombination der Groß-Klein Buchstaben
Ich denke eine vernünftige Erklärung von Seiten des Threaderstellers wäre sinnvoller als das rumgerate hier. :roll:
Also wenn sich jemand "Player" nennt soll sich keiner "pLayer", "plAyer" usw. nennen dürfen? Dann kannst du deine "Blacklist" mit "player" füllen und alle anderen Nicks in Kleinbuchstaben umwandeln und dann prüfen. ;) MfG fR34k |
Re: Kombination der Groß-Klein Buchstaben
Genau das hab ich ja gesagt.
|
Re: Kombination der Groß-Klein Buchstaben
Kein roter Kasten! :p
|
Re: Kombination der Groß-Klein Buchstaben
Die Blackliste ist von einen externen Prgramm! Da kann ich nichts ändern, das ist ja das Problem. Der wird immer Case-Sensitive prüfen, deswegen muss ich mich anpassen. Sonst hätte ich das ja schon längst getan.
Aber das habe ich bereits geschrieben. |
Re: Kombination der Groß-Klein Buchstaben
Wer prüft denn nun? Du oder das externe Programm? Erklär den Sachverhalt doch mal so, dass wir auch genau wissen, worum es geht.
|
Re: Kombination der Groß-Klein Buchstaben
Sag mal, weshalb nimmst du nicht das CaseSensitiv heraus? Dann hast dein Problem ohne Aufwand erledigt.
<HTH> GG |
Re: Kombination der Groß-Klein Buchstaben
Das geht ja angeblich nicht. Aber solange ich nicht genau weiß, wer wann was machen soll, beschäftige ich mich nicht mehr weiter damit :mrgreen:
|
Re: Kombination der Groß-Klein Buchstaben
Es Existiert ein Online Spiel.
Von diesem Spiel kann man einen Server aufsetzen. Dieser Server lädt eine Blockliste: "swearnames.txt". In dieser Datei ist 'untereinander' eine Liste der Namen, die nicht für eine Anmeldung genommen werden dürfen. So sieht diese Liste aus: Zitat:
Für jeden Spieler wird eine Datei auf dem Server angelegt: "Spielername.cfg". Unterschiedliche Anmeldenamen sind jedoch auch hier: "Spieler" und "SPIELER". Somit ist sichergestellt das möglichst viele 'Accounts' existieren können. Dieser Server ist schon compiled und kann nicht mehr geändert werden. Nur Serverconfigs und die Blockliste können bearbeitet werden. Mit meinem Programm möchte ich nur die oben genannte Blockliste verwalten. Der Hacken an der Liste ist, dass diese auf Groß- und KleinSchrift achtet. So ist von den Beispielen oben nicht Inbegriffen Bsp: "GAMEmaster" oder "AdmiN". Wenn ich jetzt einen neuen Begriff zu dieser Liste hinzufügen möchte, sollen alle Möglichkeiten ausgeschlossen werden diesen Namen zu verwenden. Bei "aaa" wären das, wie im ersten Beitrag schon angedeutet => Zitat:
|
Re: Kombination der Groß-Klein Buchstaben
und weshalb verwaltest sie nicht caseinsensitv? lesen --> konvertieren --> neue blockwörter einfügen --> permutieren --> zurückspeichern.
wo liegt das problem? <HTH> |
Re: Kombination der Groß-Klein Buchstaben
Zitat:
|
Re: Kombination der Groß-Klein Buchstaben
Hi,
unabhängig vom Sinn und Zweck der Übung:
Delphi-Quellcode:
Gruß Hawkeye
procedure PermuteCase (s: string; L: TStrings);
var SL : TStringList; chars : array [Boolean] of string; i, j : Integer; begin SL := TStringList.Create; SL.Sorted := True; SL.Duplicates := dupIgnore; SL.CaseSensitive := True; chars[False] := AnsiLowerCase(s); chars[True] := AnsiUpperCase(s); for i := 0 to Pred(1 shl Length(s)) do begin for j := 1 to Length(s) do s[j] := chars[Odd(i shr Pred(j))][j]; SL.Add(s); end; L.Assign(SL); SL.Free; end; |
Re: Kombination der Groß-Klein Buchstaben
Zitat:
Delphi-Quellcode:
Aufruf:
procedure PermuteCase (s: string; L: TStrings);
var SL : TStringList; chars : array [Boolean] of string; i, j : Integer; begin SL := TStringList.Create; SL.Sorted := True; SL.Duplicates := dupIgnore; SL.CaseSensitive := True; chars[False] := AnsiLowerCase(s); chars[True] := AnsiUpperCase(s); for i := 0 to Pred(1 shl Length(s)) do begin for j := 1 to Length(s) do s[j] := chars[Odd(i shr Pred(j))][j]; SL.Add(s); end; L.Assign(SL); SL.Free; //Abstrakter Fehler?!?! end;
Delphi-Quellcode:
moeglichkeiten:= TStrings.Create;
PermuteCase(txtname.Text, moeglichkeiten); |
Re: Kombination der Groß-Klein Buchstaben
Ich sehe noch ein ganz anderes Problem. Nehmen wir den Usernamen "Administrator" mal als Beispiel. Das ist ein String mit 13 Buchstaben, d.h. es gibt 2^13 mögliche Schreibweisen. Daraus folgt, dass die Blacklist nur dafür alleine 2^13 * (13 + 1) (bei UNIX-Schreibweise mit LF) oder gar 2^13 * (13 + 2) (bei Windows-Schreibweise mit CRLF) Bytes benötigt. Der Speicherbedarf je Username steigt potentiell mit der Stringlänge. Man darf sich fragen, ob da nicht evtl. ein Timeout oder ein OutOfMemory zu erwarten ist.
[edit] @gizzy: mach aus TStrings im Aufruf mal TStringlist. [/edit] |
Re: Kombination der Groß-Klein Buchstaben
Zitat:
Die Lösung klappt und funktionier wunderbar. Danke Wäre vielleicht ein Vorschlag für die Code Lib, schon ne tolle Idee mit den Bits schieben :-) |
Re: Kombination der Groß-Klein Buchstaben
Wie kommst Du auf 2^12?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:06 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