AGB  ·  Datenschutz  ·  Impressum  







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

Buchstaben im String sortieren?

Ein Thema von ReCoVeR · begonnen am 2. Feb 2004 · letzter Beitrag vom 2. Feb 2004
Antwort Antwort
ReCoVeR

Registriert seit: 1. Feb 2004
4 Beiträge
 
#1

Buchstaben im String sortieren?

  Alt 2. Feb 2004, 13:42
huhu wollte mal fragen, wie ich die Buchstaben von einem String sortieren kann

also aus "test"


soll "estt" werden..


thX schonmal
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Buchstaben im String sortieren?

  Alt 2. Feb 2004, 13:44
Mittels ASCII-Code geht das.
Man muss den dann so wie zahlen behandeln und das Sortieren ist dann ganz einfach.
  Mit Zitat antworten Zitat
MikeS

Registriert seit: 3. Mai 2003
Ort: München
157 Beiträge
 
Delphi 7 Professional
 
#3

Re: Buchstaben im String sortieren?

  Alt 2. Feb 2004, 13:47
moin

du kannst mittels abfrage auch direkt buchstaben miteinander vergleichen!
if 'a' < 'bthen
Mike Schröder
Fleiß kann man vortäuschen, faul muss man schon selber sein!
  Mit Zitat antworten Zitat
BungeeBug

Registriert seit: 19. Dez 2002
Ort: zuhause?!
227 Beiträge
 
Delphi 6 Personal
 
#4

Re: Buchstaben im String sortieren?

  Alt 2. Feb 2004, 13:48
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.
MfG BungeeBug
Wer andern eine Grube gräbt sollte auf Gasleitungen achten!!!!
  Mit Zitat antworten Zitat
MikeS

Registriert seit: 3. Mai 2003
Ort: München
157 Beiträge
 
Delphi 7 Professional
 
#5

Re: Buchstaben im String sortieren?

  Alt 2. Feb 2004, 13:54
@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!
Mike Schröder
Fleiß kann man vortäuschen, faul muss man schon selber sein!
  Mit Zitat antworten Zitat
BungeeBug

Registriert seit: 19. Dez 2002
Ort: zuhause?!
227 Beiträge
 
Delphi 6 Personal
 
#6

Re: Buchstaben im String sortieren?

  Alt 2. Feb 2004, 13:55
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!
Hab ich doch
MfG BungeeBug
Wer andern eine Grube gräbt sollte auf Gasleitungen achten!!!!
  Mit Zitat antworten Zitat
MikeS

Registriert seit: 3. Mai 2003
Ort: München
157 Beiträge
 
Delphi 7 Professional
 
#7

Re: Buchstaben im String sortieren?

  Alt 2. Feb 2004, 14:00
da habe ich mich dann wohl geirrt!
oder doch nicht????
Mike Schröder
Fleiß kann man vortäuschen, faul muss man schon selber sein!
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#8

Re: Buchstaben im String sortieren?

  Alt 2. Feb 2004, 14:13
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))
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Buchstaben im String sortieren?

  Alt 2. Feb 2004, 14:19
Anbei mal ein Demoprogramm mit drei total unterschiedlichen Ansätzen zur Sortierung (alle drei arbeiten nach dem ANSI Satz )

......
Angehängte Dateien
Dateityp: zip sort_them.zip (4,5 KB, 14x aufgerufen)
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Buchstaben im String sortieren?

  Alt 2. Feb 2004, 16:48
@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
  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 21:43 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