![]() |
Innerhalb eines Strings Characters sortieren
Hallo!
Ich muss innerhalb eines Strings die einzelnen Character alphabetisch sortieren. Das ganze soll so gemacht werden: # Alphabet in einem Array speichern (Kleinbuchstaben sind ausreichend) # Eingabestring Buchstaben für Buchstaben mit Array vergleichen # Alphabetisch geordneten Ausgabestring generieren. Dieser String soll dieselben Zeichen enthalten wie der Eingabestring (nicht weniger, nicht mehr) sollte ja eigentlich nicht so schwer sein. höchstwahrscheinlich werde ich dabei geschachtelte schleifen brauchen, weil wir das gerade in der schule wiederholen. mein code sieht so aus
Delphi-Quellcode:
ich denke schon das ich auf dem richtigen weg bin, aber mir fehlt einfach der denkansatz wie ich hier die buchstaben sortieren soll...
var
Form1: TForm1; const abc:string=('abcdefghijklmnopqrstuvwxyz'); implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i,j: Integer; begin for i := 1 to length(edit1.text) do for j := 1 to 26 do if edit1.text[i] = abc[j] then end; ich würde mich über jede hilfe freuen :) |
Re: Innerhalb eines Strings Characters sortieren
Versuch es mal mit einem Bubblesort, bei dem das Tauschkriterium die Position der Zeichen innerhalb des Vergleichsstrings ist.
|
Re: Innerhalb eines Strings Characters sortieren
Bei dieser Aufgabenstellung bietet sich Bucketsort an.
|
Re: Innerhalb eines Strings Characters sortieren
Oder du nimmst ein array['a'..'z'] of Integer dass du mit 0 initialisiertst, und dann den String durchgehst
Delphi-Quellcode:
Oder so ähnlich.
var
arr: array['a'..'z'] of Integer; str: String; i: Integer; c: Char; begin for c=low(arr) to high(arr) do arr[c] = 0; for i=1 to length(str) do inc(arr[str[i]]); for c=low(arr) to high(arr) do edit1.text = edit1.text + StringOfChar(c, arr[c]); Der Code zählt erst die Vorkommen der jeweiligen Buchstaben und gibt dann alle Buchstaben alphabetissch aus ;) |
Re: Innerhalb eines Strings Characters sortieren
die bubblesort variante denke ich wird am besten sein, weil ich bucketsort noch nicht kenne und das andere eher nicht der aufgabe entspricht.
ich kann mir den bubblesort code aber in der praxis nicht vorstellen... |
Re: Innerhalb eines Strings Characters sortieren
jfheins' Code ist eine Art von Bucketsort. ;-)
|
Re: Innerhalb eines Strings Characters sortieren
hmmm^^ ok aber den haben wir noch nicht gelernt. ich werd das wohl irgendwie mit bubblesort machen müssen.
|
Re: Innerhalb eines Strings Characters sortieren
Naja, man lernt auch nicht alle algorythmen. Manche Dinge sind so einfach das fast jeder drauf kommt. Zum Beispiel muss man nicht lernen 25 Zahlen zu addieren. Es genügt wenn man weiß wie addieren geht und bekommt es somit allein hinn. Ähnlich ist es mit dem Bubblesort. Man schaut einfach ob das nachfolgende kleiner ist und tauscht die Positionen wenn es nicht stimmt.
|
Re: Innerhalb eines Strings Characters sortieren
danke für eure hilfe. ich habs jetzt aber doch ganz anders gemacht^^
nach langem nachdenke kam mir diese idee. ich verwende einen zähler, der zählt wie oft ein buchstabe vorkommt. dann gebe ich die buchstaben einfach (edit: in der richtigen reihenfolge) in ein edit aus. mfg general
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const abc:string=('abcdefghijklmnopqrstuvwxyz'); var i,j: Integer; feld:array [1..26] of byte; //dient als Zähler begin for i := 1 to 26 do //in das array werden nullen geschrieben feld[i]:=0; for i := 1 to length(edit1.text) do for j := 1 to 26 do if edit1.text[i] = abc[j] then inc(feld[j]); //es wird edit1 mit dem abc string verglichen und bei übereinstimmungen das zähler-feld um 1 erhöht edit2.text:=''; //edit2 wird gelöscht for i := 1 to 26 do if feld[i] > 0 then repeat begin edit2.text:=edit2.text+abc[i]; dec(feld[i]); end; until feld[i] = 0; //wenn ein zähler > 0 ist, //dann wird der richtige buchstabe dazu so oft in edit2 geschrieben bis der zähler 0 ist end; |
Re: Innerhalb eines Strings Characters sortieren
Zitat:
Das was du gemacht hast ist das, was ich dir oeben vorgeschlagen habe, und was sich Bucketsort nennt. Du hast es zwar etwas umständlich gemacht, aber es ist die gleiche Logik ;) Ich habe nur das Array nicht als
Delphi-Quellcode:
deklariert, sondern als
feld:array [1..26] of byte;
Delphi-Quellcode:
feld:array ['a'..'z'] of byte;
Delphi-Quellcode:
Das geht dan nämlich auch viel einfacher so:
for i := 1 to length(edit1.text) do
for j := 1 to 26 do if edit1.text[i] = abc[j] then inc(feld[j]);
Delphi-Quellcode:
;)
for i := 1 to length(edit1.text) do
inc(feld[edit1.text[i]]); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 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