![]() |
Wie bekomm ich das mit dem sortieren hin?
Code:
Wie ihr vllt seht, habe ich versucht ein Programm zu schreiben, welches die Anzahl verschiedener Buchstaben ausgibt. Also wie viele verschiedene Bucstaben vorkommen. Ich hatte mir das so überlegt, dass die Buchstaben in ASCII-Code umgewandelt werden, dann in eine Listbox geschrieben werden, dort sortiert werden und dann die Zahlen verglichen werden. Jedoch will es mit dem Sortieren einfach nicht so wirklich hinhaun. Gibt es da ne Möglichkeit? Ich hab BubbleSort versucht, aber irgendwie haperts da vollkommen. Oder habt ihr ne ganz andere Idee?
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; ListBox1: TListBox; ListBox2: TListBox; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure Memo1Change(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; wor,s:string; l,x,i,c,k,e,j,n,merke:integer; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin listbox1.Clear; wor:=upcase(memo1.text); s:=wor; l:=1; for i:=1 to length(s) do begin x:=ord(s[i]); begin If x>=65 Then If x<=90 Then listbox1.items.Add(inttostr(x)); end; end; begin c:=listbox1.Count; edit2.text:=inttostr(c); end; begin //Hier muss etwas wie ein sortieralgorithmus hin. Aber es will nicht klappen. end; for j:=1 to c do begin if s[j]<s[j+1] Then l:=l Else if s[j]<s[j+1] Then l:=l+1; end; edit1.text:=inttostr(l); end; procedure TForm1.Memo1Change(Sender: TObject); begin end; end. |
AW: Wie bekomm ich das mit dem sortieren hin?
Wie wär's mit dem Property Sorted?
![]() |
AW: Wie bekomm ich das mit dem sortieren hin?
Zitat:
Das sieht dann eher so aus:
Code:
Der Teil müsste dann verändert werden:
1
10 100 2 20 200 ...
Delphi-Quellcode:
for i:=1 to length(s) do
begin x:=ord(s[i]); begin If (x>=65) and (x<=90) Then listbox1.items.Add(s[i]); end; end; |
AW: Wie bekomm ich das mit dem sortieren hin?
hallo,
ich würde das Problem mit einer Schleife lösen. Du ermittelt das erste Zeichen deiner Zeichenkette, erhöhst deinen Zähler um eins und entfernst anschliessend alle Vorkommen des ersten Zeichen aus deiner Zeichenkette. Dies wiederholst du solange bis die Zeichenkette leer ist.
Delphi-Quellcode:
Quellcode Freihand programmiert, nicht getestet.
zaehler:=0;
While zeichenkette<>'' do begin h:=midstr(zeichenkette,1,1); inc(zaehler); zeichenkette:=stringreplace(zeichenkette,h,'', [rfReplaceAll, rfIgnoreCase]); end; mfg |
AW: Wie bekomm ich das mit dem sortieren hin?
Zitat:
Delphi-Quellcode:
// ---------- Fügt vor den String Zeile das Zeichen so oft an, bis die Länge Zahl erreicht ist ----------
Function Plus_String(Zeile: String; Zeichen: Char; Zahl: Integer): String; Var Aus : String; begin If Length(Zeile) > Zahl - 1 Then Result := Zeile Else Begin Aus := Zeile; Repeat Aus := Zeichen + Aus; Until Length(Aus) = Zahl; Result := Aus; End; end; |
AW: Wie bekomm ich das mit dem sortieren hin?
Wie wäre es mit einem simplen Bubble Sort?
|
AW: Wie bekomm ich das mit dem sortieren hin?
Hmm...
Gibt es da bei dei TStringList nicht CustomSort? Dort in der Vergleichsroutine einfach mit StrToInt arbeiten und dann direkt die Zahlenwerte vergleichen, statt die Strings... |
AW: Wie bekomm ich das mit dem sortieren hin?
Zitat:
Delphi-Quellcode:
und diesen in eine Liste packen.
type
tMyRecord = record bstb:char; Count:integer; end; Nachdem Du die Buchstaben gezählt hast, kannst Du sortieren soviel und wie Du willst, und dann die Listbox befüllen. Gruß K-H |
AW: Wie bekomm ich das mit dem sortieren hin?
Dein Problem ist das du ein natürliche Sortierung willst.
Lösungsansätze mit Quellcode findest du z.B. ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 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