![]() |
AW: String buchstabenweise in array einlesen
Zeichen zählen:
Delphi-Quellcode:
var
Anzahl: array[Char] of Integer; C: Char; i: Integer; for C := Low(Char) to High(Char) do Antahl[C] := 0; for i := 1 to Length(Wort) do Anzahl[Word[i]] := Anzahl[Word[i]] + 1;
Delphi-Quellcode:
nun steht zu jedem Char die Anzahl im Array drin, z.B.
var
Anzahl: array[Char] of Integer; C: Char; FillChar(Anzahl, SizeOf(Anzahl), 0); for C in Wort do Inc(Anzahl[C]);
Delphi-Quellcode:
AnzahlVonGroßA := Anzahl['A'];
|
AW: String buchstabenweise in array einlesen
Ich glaube, von solchen extremen Optimierungen sollte man eher absehen, das es hier eher um das allgemeine Verständnis geht.
|
AW: String buchstabenweise in array einlesen
Vielen Dank ich werds trotz eher geringem Verständnis einfach durchprobieren :thumb:
|
AW: String buchstabenweise in array einlesen
Ich hatte das bewusst möglichst einfach gehalten, aber manche Egos scheinen einfach stärker zu sein :evil:
|
AW: String buchstabenweise in array einlesen
Vermutlich meint dein Lehrer lediglich das:
Delphi-Quellcode:
type
TCharArray = array of Char; function LowerCaseChar (const C: char): char; begin Result:= C; if (Result in ['A'..'Z', 'Ä', 'Ö', 'Ü']) then Inc(Byte(Result), 32); end; function FindChar (const S: TCharArray; const C: char): integer; var I: integer; begin Result:= 0; for I:= 0 to Length(S)-1 do if S[I] = C then Inc(Result); end; procedure TForm1.Edit2Change(Sender: TObject); var I, L1, L2, N: integer; C: char; S: TCharArray; begin Label1.Caption:= ''; L1:= Length(Edit1.Text); L2:= Length(Edit2.Text); if ((L1 > 0) and (L2 > 0)) then begin SetLength(S, L1); for I:= 1 to L1 do S[I-1]:= LowerCaseChar(Edit1.Text[I]); C:= LowerCaseChar(Edit2.Text[1]); N:= FindChar(S, C); Label1.Caption:= 'Buchstabe ' + C + ' kommt ' + IntToStr(N)+' mal vor.'; SetLength(S, 0); end; end; |
AW: String buchstabenweise in array einlesen
Tragt nur ruhig ein wenig mehr zur Verwirrung bei, ich halte mich jetzt da raus.
|
AW: String buchstabenweise in array einlesen
FillChar ist doch keine extreme Optimierung?
Und den Rest kann man sich aus jedem guten Delphi-Lehrbuch rausholen. :angle: Gut, das For-In ist vielleicht neu und es geht nicht in vielen älternen Delphiversionen, aber zu Extremoptimiert würde ich auch das nicht zählen. Zitat:
Ich vermute mal du wolltest
Delphi-Quellcode:
schreiben.
BS_array[c] := BS_array[c] +1;
PS: gegenüber einiger anderer Codes hier ist mein Cod sogar fehlerunanfälliger. z.B. das
Delphi-Quellcode:
im gerade gezeigten Code kann zu einem Pufferüberlauf führen,
array ['a'..'z'] of byte;
wenn in
Delphi-Quellcode:
nicht nur Kleinebuchstaben von A bis Z vorkommen.
wort
Schließlich ist fast immer die Index- und Bereichsprüfung deaktiviert. Das Array[Char] ist beim Unicode zwar ein 1/4 MB groß, aber dafür liegen garantiert alle Zeichen irgendwo in dessen Bereich. |
AW: String buchstabenweise in array einlesen
Ich bezog mich auf die Version mit dem Move.
|
AW: String buchstabenweise in array einlesen
achso das. :lol:
Aber wenn das schon Hochoptimiert ist, dann kenn ich etwas Höchstoptimiertes (auch wenn mich die Grammatikfreunde dafür erschlagen werden).
Delphi-Quellcode:
ACHTUNG:
function StrToArray(Value: String): TCharArray;
begin String(Pointer(Result)) := Value; // geht zwar, also wenn man das Char-Array nur auslesen will und nicht verändert end; * ich weiß was ich mache (denn ich weiß wie beide Typen intern aufgebaut sind, wie sie verwaltet werden und daß ein String eigentlich "nur" ein aufbemotztes CharArray ist) * und ich würde jeden standrechtlich erschießen, welcher sowas produktiv einsetzt * also macht es besser nicht nach :warn: |
AW: String buchstabenweise in array einlesen
Zitat:
Delphi-Quellcode:
Sorry, ich konnte nicht widerstehen. :oops: :stupid:
ShowMessageFmt('"%s" kommt %d mal in "%s" vor', [Edit2.Text,
TDelegateEnumerable<Char>.Create( procedure var c: Char; begin for c in Edit1.Text do Yield<Char>(c); end).Where( function(c: Char): Boolean begin Result := SameText(c, Edit2.Text); end).Count, Edit1.Text]); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 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