![]() |
Doppelte Buchstaben aus String auslesen
Hallöchen,
ich hätte da mal ne Frage. Fällt euch eine Idee ein, wie man doppelte Buchstaben aus einem String löschen könnte? Also z.B. Erwinistdoof, da soll das zweite i und das zweite o gelöscht werden. Ich hatte die Idee, dass es vielleicht möglich wäre, den gerade gelesenen Buchstaben mit den vorher gelesenen Buchstaben zu vergleichen und diese bei der erneuten Zusammensetzung des Strings nicht zu berücksichtigen. Ich habe leider absolut keine Idee wie man dies bewerkstelligen könnte. Danke und LG SirMaurice |
AW: Doppelte Buchstaben aus String auslesen
Lustiges Spiel, könnte man z.B. so machen mit einem TDictionary als Speicher für die Zeichen und deren Anzahl.
Das gibt dann auch gleich noch die Anzahl der beteiligten Zeichen aus.
Delphi-Quellcode:
unit Unit1;
interface uses System.Generics.Collections , Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TCharsCount = TDictionary<Char,Integer>; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FChars : TCharsCount; function Convert(const AInput: String): String; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin FChars := TCharsCount.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin FChars.Free; end; function TForm1.Convert(const AInput : String) : String; var I: Integer; LChar : Char; LCount: Integer; LSB: TStringBuilder; begin LSB := TStringBuilder.Create; try for I := Low(AInput) to High(AInput) do begin LChar := AInput[I]; if FChars.TryGetValue( LChar, LCount) then begin Inc( LCount ); FChars.Items[LChar] := LCount; end else begin // take only 1. time LCount := 1; if FChars.TryAdd(LChar, LCount) then LSB.Append( LChar ); end; end; finally Result := LSB.ToString; LSB.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var LKey: Char; begin FChars.Clear; Memo1. Clear; Memo1.Lines.Append( Convert( Edit1.Text ) ); for LKey in FChars.Keys do Memo1.Lines.Append( LKey + ' - ' + FChars.Items[LKey].ToString + ' Zeichen' ); end; end. |
AW: Doppelte Buchstaben aus String auslesen
Zitat:
Delphi-Quellcode:
FUNCTION RemoveRepeatetChars(const S:String):String;
var I,J:Integer; C:Char; UsedChars:Array of Boolean; begin SetLength(UsedChars,Ord(High(Char))+1); Result:=S; J:=0; for I:=1 to Length(Result) do begin C:=Result[I]; if not UsedChars[Ord(C)] then begin Inc(J); Result[J]:=C; UsedChars[Ord(C)]:=True; end; end; SetLength(Result,J); end; |
AW: Doppelte Buchstaben aus String auslesen
Kann man machen, aber mit
Delphi-Quellcode:
wird das Array riesig groß.
SetLength(UsedChars,Ord(High(Char))+1);
// Ord(High(Char)) --> wird 65535 Zeichen groß Deshalb war mein Vorschlag mit TDictionary (oder irgendein anderer dynamischer Container), der würde nur soweit wachsen je nachdem wieviel Elemente es gibt (naja, bei 4GB RAM spielt das vielleicht auch keine grosse Rolle) :stupid: Das interessante ist ja, das irgendwann keine neuen Buchstaben mehr hinzukommen. wenn einmal alle 26 drin sind. |
AW: Doppelte Buchstaben aus String auslesen
Zitat:
|
AW: Doppelte Buchstaben aus String auslesen
Zitat:
|
AW: Doppelte Buchstaben aus String auslesen
Ich bräuchte tatsächlich nur 26 Buchstaben.
Ich sollte vielleicht ein wenig mehr zum Projekt schreiben. Es geht darum, dass ein Programm entwickelt werden soll, welches einen eingegebenen Text verschlüsselt. Ein "Passwort" wird eingegeben, z.B. CBA, und es wird ein Schlüssel bestimmt, z.B. K, dann wird aus dem normalen Alphabet A B C D E F G H I J K L M N O P Q R S T U V W X Y Z eben Q R S T U V W X Y Z C B A D E F G H I J K L M N O P oder bei ERWIN dann halt A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Z A B C D F G H J K E R W I N M O P Q S T U V W X Y (Ist jetzt nen bisschen verschoben, dass C bzw. E sollte unter dem K sein) Deswegen darf auch kein Buchstabe doppelt vorkommen. Weiß halt leider nicht wie genau ich diese Buchstaben aus dem "Passwort" aussortieren soll, wie z.B. bei CCBA. Erstmal will ich nur Buchstaben verschlüsseln, später möchte ich ergänzen, dass die Formatierung und Sonderzeichen, also auch Leerzeichen, erhalten bleiben. |
AW: Doppelte Buchstaben aus String auslesen
Das sieht fast aus wie ROT13. Verschlüsselung würde ich sowas nicht nennen. Das knackt dir ein Kind einer Mittelschule der 7. Klasse im spielerischen Matheunterricht.
|
AW: Doppelte Buchstaben aus String auslesen
Sowas ist es auch.
Ist auch mehr als Sichtschutz gedacht bzw. auch mehr oder weniger eine Aufgabe. Weiß nur nicht so recht wie ich mit dem String umgehen soll. |
AW: Doppelte Buchstaben aus String auslesen
Hallo SirMaurice,
zum Thema Passwortverschlüsselung kannst Du mal nachschauen unter: ![]() Vielleicht hilft es Dir weiter. Gruß Andreas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:15 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