AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Doppelte Buchstaben aus String auslesen

Ein Thema von SirMaurice · begonnen am 17. Mai 2019 · letzter Beitrag vom 4. Jun 2019
Antwort Antwort
Seite 1 von 3  1 23   
SirMaurice

Registriert seit: 7. Dez 2018
Ort: Berlin
16 Beiträge
 
Delphi 5 Enterprise
 
#1

Doppelte Buchstaben aus String auslesen

  Alt 17. Mai 2019, 16:18
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
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.486 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Doppelte Buchstaben aus String auslesen

  Alt 17. Mai 2019, 16:53
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.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
960 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Doppelte Buchstaben aus String auslesen

  Alt 17. Mai 2019, 17:11
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

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;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.486 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Doppelte Buchstaben aus String auslesen

  Alt 17. Mai 2019, 17:56
Kann man machen, aber mit

Delphi-Quellcode:
    SetLength(UsedChars,Ord(High(Char))+1);
   
    // Ord(High(Char)) --> wird 65535 Zeichen groß
wird das Array riesig 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)

Das interessante ist ja, das irgendwann keine neuen Buchstaben mehr hinzukommen. wenn einmal alle 26 drin sind.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.973 Beiträge
 
#5

AW: Doppelte Buchstaben aus String auslesen

  Alt 17. Mai 2019, 18:13
Zitat:
wenn einmal alle 26 drin sind.
Wer sagt denn, dass der TE nur A bis Z speichern möchte?
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
960 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Doppelte Buchstaben aus String auslesen

  Alt 17. Mai 2019, 19:15
Kann man machen, aber mit

Delphi-Quellcode:
    SetLength(UsedChars,Ord(High(Char))+1);
   
    // Ord(High(Char)) --> wird 65535 Zeichen groß
wird das Array riesig groß.
Wie bitte, 65535 (korrekt 65536) Bytes ist riesig ?
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
SirMaurice

Registriert seit: 7. Dez 2018
Ort: Berlin
16 Beiträge
 
Delphi 5 Enterprise
 
#7

AW: Doppelte Buchstaben aus String auslesen

  Alt 17. Mai 2019, 20:02
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.

Geändert von SirMaurice (17. Mai 2019 um 20:17 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.973 Beiträge
 
#8

AW: Doppelte Buchstaben aus String auslesen

  Alt 17. Mai 2019, 20:06
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.
  Mit Zitat antworten Zitat
SirMaurice

Registriert seit: 7. Dez 2018
Ort: Berlin
16 Beiträge
 
Delphi 5 Enterprise
 
#9

AW: Doppelte Buchstaben aus String auslesen

  Alt 17. Mai 2019, 20:19
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.
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
526 Beiträge
 
Delphi XE5 Professional
 
#10

AW: Doppelte Buchstaben aus String auslesen

  Alt 17. Mai 2019, 20:29
Hallo SirMaurice,

zum Thema Passwortverschlüsselung kannst Du mal nachschauen unter:

https://www.delphipraxis.net/200188-...ml#post1428892

Vielleicht hilft es Dir weiter.

Gruß
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf