Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Buchstaben im String sortieren? (https://www.delphipraxis.net/15665-buchstaben-im-string-sortieren.html)

ReCoVeR 2. Feb 2004 14:42


Buchstaben im String sortieren?
 
huhu wollte mal fragen, wie ich die Buchstaben von einem String sortieren kann

also aus "test"


soll "estt" werden.. :)


thX schonmal :)

Matze 2. Feb 2004 14:44

Re: Buchstaben im String sortieren?
 
Mittels ASCII-Code geht das.
Man muss den dann so wie zahlen behandeln und das Sortieren ist dann ganz einfach. ;)

MikeS 2. Feb 2004 14:47

Re: Buchstaben im String sortieren?
 
moin

du kannst mittels abfrage auch direkt buchstaben miteinander vergleichen!
Delphi-Quellcode:
if 'a' < 'b' then

BungeeBug 2. Feb 2004 14:48

Re: Buchstaben im String sortieren?
 
Hi,

ich hätte da ne "schnellere" Idee.

Delphi-Quellcode:
var
 MyStringList : TStringList;
 i : integer;
begin
 MyStringList := TStringList.Create;
 
 for i := 1 to Length(s) do
  begin
   MyStingList.Add(s[i]);
  end;
 
 s := '';
 MyStringList.Sort;
 
 for i := 0 to MyStringList.Item.Count -1 do
  begin
   s := s + MyStringList.Item[i];
  end;

 MyStringList.Free;
 
end;
Ist aber grad so aus dem Kopf entstanden. Könnte also sein das ein paar von den Funktionen nicht stimmen oder anders geschrieben werden.

MikeS 2. Feb 2004 14:54

Re: Buchstaben im String sortieren?
 
@BungeeBug
du solltest s spätestens nach dem sortienen leeren,
weil du an den vorhandenen einfach den sortierten wieder ranhängst!

ansonsten habe ich an deine möglichkeit auch schon gedacht!
:wink:

BungeeBug 2. Feb 2004 14:55

Re: Buchstaben im String sortieren?
 
Zitat:

Zitat von MikeS
@BungeeBug
du solltest s spätestens nach dem sortienen leeren,
weil du an den vorhandenen einfach den sortierten wieder ranhängst!

ansonsten habe ich an deine möglichkeit auch schon gedacht!
:wink:

Hab ich doch :P

MikeS 2. Feb 2004 15:00

Re: Buchstaben im String sortieren?
 
:-D da habe ich mich dann wohl geirrt! :mrgreen:
oder doch nicht???? :?:

choose 2. Feb 2004 15:13

Re: Buchstaben im String sortieren?
 
Hallo ReCoVer,

theoretisch handelt es sich bei Deinem Problem zwar um das Sortieren einer geordneten (nicht sortieren!) eindimensionalen Struktur, so dass Du einen der klassischen Algorithmen anwenden könntest. Tatsächlich jedoch kannst Du die Kenntnis über die Beschaffenheit der Elemente (jedes im Intervall [#0..#255]) und die Tatsache, dass die Delphi-Strings weniger als 4 Milliarden (genau: 2^31 also etwa 2 Milliarden) fassen können, ausnutzen:
Ein denkbarer Ansatz wäre mit diesen Informationen, ein Array aufzuspannen, für das für jedes denkbare der 256 Zeichen einen Zähler hält. Iteriere über den Eingangsstring und zähle, wie oft die Zeichen vorkommen. Um nun die Ausgabe zu erstellen, iterierst Du über das Zählerarray und hängst das jeweilige Zeichen sooft an das bisherige Ergebnis, wie Du es beim Eingangsstring gezählt hast. Die Sortierung erhältst Du so "gratis", weil Dein Zählarray direkt über den ASCII-Wert des Zeichens, das gleichzeitig dem Kriterium der Ordnungsrelation entspricht, indiziert wird.

Anbei eine ad hoc-Implementierung (nur zur Anschauung, gerade das Konkatenieren könnte optimiert werden):
Delphi-Quellcode:
function SortString(const AString: string): string;
var
  arChars: array[Char] of Cardinal;
  myChar: Char;
  iChar: Integer;
begin
  // set every counter to zero
  FillChar(arChars, SizeOf(arChars), 0);

  // scan every char in string and increase counter for each
  //  found character by one
  for iChar:= 1 to Length(AString) do
    Inc(arChars[AString[iChar]]);

  Result:= '';
  // append found matches to result
  for myChar:= Low(myChar) to High(myChar) do
    Result:= Result+DupeString(myChar, arChars[myChar]);
end;
EDIT: Das beschriebene Verfahren nennt man iÜ Bei Google suchenBucket Sort und ist neben der Einfachheit auch noch mit der Komplexität O(n) effizienter als die untere Schranke von auf Vergleichen basierenden Algorithmen O(n*log(n))

sakura 2. Feb 2004 15:19

Re: Buchstaben im String sortieren?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei mal ein Demoprogramm mit drei total unterschiedlichen Ansätzen zur Sortierung (alle drei arbeiten nach dem ANSI Satz ;-))

...:cat:...

negaH 2. Feb 2004 17:48

Re: Buchstaben im String sortieren?
 
@Choose, danke das du diesen doch weniger bekannten Ansatz angesprochen hast. In fakt, für die gestellte Aufgabe ist Chooses Vorschlag bei weitem der effizienteste.

Gruß Hagen


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