AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Innerhalb eines Strings Characters sortieren
Thema durchsuchen
Ansicht
Themen-Optionen

Innerhalb eines Strings Characters sortieren

Ein Thema von Mr. General · begonnen am 18. Okt 2008 · letzter Beitrag vom 18. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
Mr. General

Registriert seit: 8. Aug 2008
9 Beiträge
 
Turbo Delphi für Win32
 
#1

Innerhalb eines Strings Characters sortieren

  Alt 18. Okt 2008, 10:16
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:
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 denke schon das ich auf dem richtigen weg bin, aber mir fehlt einfach der denkansatz wie ich hier die buchstaben sortieren soll...

ich würde mich über jede hilfe freuen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Innerhalb eines Strings Characters sortieren

  Alt 18. Okt 2008, 10:20
Versuch es mal mit einem Bubblesort, bei dem das Tauschkriterium die Position der Zeichen innerhalb des Vergleichsstrings ist.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Innerhalb eines Strings Characters sortieren

  Alt 18. Okt 2008, 10:30
Bei dieser Aufgabenstellung bietet sich Bucketsort an.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Innerhalb eines Strings Characters sortieren

  Alt 18. Okt 2008, 10:35
Oder du nimmst ein array['a'..'z'] of Integer dass du mit 0 initialisiertst, und dann den String durchgehst
Delphi-Quellcode:
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]);
Oder so ähnlich.

Der Code zählt erst die Vorkommen der jeweiligen Buchstaben und gibt dann alle Buchstaben alphabetissch aus
  Mit Zitat antworten Zitat
Mr. General

Registriert seit: 8. Aug 2008
9 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Innerhalb eines Strings Characters sortieren

  Alt 18. Okt 2008, 11:38
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...
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Innerhalb eines Strings Characters sortieren

  Alt 18. Okt 2008, 11:47
jfheins' Code ist eine Art von Bucketsort.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Mr. General

Registriert seit: 8. Aug 2008
9 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Innerhalb eines Strings Characters sortieren

  Alt 18. Okt 2008, 11:56
hmmm^^ ok aber den haben wir noch nicht gelernt. ich werd das wohl irgendwie mit bubblesort machen müssen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Innerhalb eines Strings Characters sortieren

  Alt 18. Okt 2008, 12:20
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Mr. General

Registriert seit: 8. Aug 2008
9 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Innerhalb eines Strings Characters sortieren

  Alt 18. Okt 2008, 15:47
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;
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#10

Re: Innerhalb eines Strings Characters sortieren

  Alt 18. Okt 2008, 16:05
Zitat von Mr. General:
danke für eure hilfe. ich habs jetzt aber doch ganz anders gemacht^^
Wenn ichs dir sagen darf: Hast du nicht

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 alsfeld:array [1..26] of byte; deklariert, sondern alsfeld:array ['a'..'z'] of byte;
Delphi-Quellcode:
for i := 1 to length(edit1.text) do
  for j := 1 to 26 do
    if edit1.text[i] = abc[j] then
      inc(feld[j]);
Das geht dan nämlich auch viel einfacher so:
Delphi-Quellcode:
for i := 1 to length(edit1.text) do
  inc(feld[edit1.text[i]]);
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:59 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