AGB  ·  Datenschutz  ·  Impressum  







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

String buchstabenweise in array einlesen

Ein Thema von basti2011 · begonnen am 12. Jun 2011 · letzter Beitrag vom 14. Jun 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

AW: String buchstabenweise in array einlesen

  Alt 12. Jun 2011, 22:52
Es geht auch noch schneller Zeitersparnis ist je nach Stringlänge sehr hoch:
Delphi-Quellcode:
function StrToArray(Value: String): TCharArray;
var
  L : Integer;
begin
  L := Length(Value);
  SetLength(Result, L);
  if (L > 0) then
    Move(PChar(Value)^, Result[0], L * SizeOf(Char));
end;
Hier mal ein kleiner Benchmark (QuadCore Q6600):
Code:
Rounds: 10000000

Length: 21
naive: 2428ms
optimized: 1128ms
Time Saved: 54%

Length: 168
naive: 9179ms
optimized: 1831ms
Time Saved: 80%
Eine CountDiverseChars-Methode kommt auch bald
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
basti2011

Registriert seit: 1. Mai 2011
Ort: Linz
11 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: String buchstabenweise in array einlesen

  Alt 12. Jun 2011, 23:30
Vielen Dank ich werds trotz eher geringem Verständnis einfach durchprobieren
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#3

AW: String buchstabenweise in array einlesen

  Alt 13. Jun 2011, 00:58
Ich hatte das bewusst möglichst einfach gehalten, aber manche Egos scheinen einfach stärker zu sein
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
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.042 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: String buchstabenweise in array einlesen

  Alt 13. Jun 2011, 02:27
Ich hatte das bewusst möglichst einfach gehalten, aber manche Egos scheinen einfach stärker zu sein
Hätte er Delphi 2010 oder höher könnte er auch das hier machen:
Delphi-Quellcode:
  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]);
Sorry, ich konnte nicht widerstehen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: String buchstabenweise in array einlesen

  Alt 13. Jun 2011, 02:30
Also, wenn ihr ihn verwirren wollt, dann habt ihr das sehr wahrscheinlich mittlerweile geschafft.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.042 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: String buchstabenweise in array einlesen

  Alt 13. Jun 2011, 02:36
Also, wenn ihr ihn verwirren wollt, dann habt ihr das sehr wahrscheinlich mittlerweile geschafft.
Du meinst dich, nicht ihn, oder?

Nur noch Begin und End ersetzt und man hätte einen typischen C-Code
Pff, du erkennst ja nur nicht die Kapazität und Flexibilität dieses Codes
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (13. Jun 2011 um 02:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#7

AW: String buchstabenweise in array einlesen

  Alt 13. Jun 2011, 02:31
Nur noch Begin und End ersetzt und man hätte einen typischen C-Code
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.869 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: String buchstabenweise in array einlesen

  Alt 13. Jun 2011, 10:46
Ihr seid schon komische Vögel, der Te offenbart, dass ihm das grundlegende Verständnis fehlt und ihr offenbart ihm eure "speziallösungen", die er bestimmt nicht versteht.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#9

AW: String buchstabenweise in array einlesen

  Alt 13. Jun 2011, 12:33
Meine Rede
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
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#10

AW: String buchstabenweise in array einlesen

  Alt 14. Jun 2011, 12:53
Einfach an die Aufgabenstellung halten, offensichtlich soll der Umgang mit dyn. Array geübt werden:
Zitat:
Schreib ein Programm welches ein eingegebenes Wort buchstabenweise in ein dyn. Array einliest.
Delphi-Quellcode:
type
  TCharDynArray = array of Char;

function StringToDynArray(const AValue: string): TCharDynArray;
begin
  // Strings beginnen bei Index 1, Arrays bei 0 => wichtiges Lernziel
  SetLength(Result, Length(AValue));
  for i := 0 to Length(Result) - 1 do
    Result[i] := AValue[i + 1];
end;
Zitat:
Nach Eingabe eines Buchstabens soll ausgegeben werden wie oft dieser Buchstabe im eingegebenen Wort vorkommt.
Delphi-Quellcode:
// Array-Parameter immer als "const" oder "var" übergeben, sonst wird beim Funktionsaufruf eine Kopie angelegt
function GetBuchstabenAnzahl(const ACharDynArray: TCharDynArray; AValue: Char): Integer;
begin
  Result := 0;
  for i := 0 to Length(ACharDynArray) - 1 do
  begin
    if ACharDynArray[i] = AValue then
      Result := Result + 1;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  a: TCharDynArray;
  s: string;
  n: Integer;
begin
  // Text der durchsucht werden soll
  s := edit1.text;
  if Length(s) = 0 then
  begin
    MessageBox('Geben Sie einen Text an der durchsucht werden soll!', Caption);
    Exit;
  end;
  a := StringToDynArray(s);

  // Buchstabe der gesucht wird
  s := edit2.text;
  if Length(s) = 0 then
  begin
    MessageBox('Geben Sie einen Buchstaben an der gesucht werden soll!', Caption);
    Exit;
  end;
  
  if Length(s) > 1 then
  begin
    MessageBox('Geben Sie nur einen Buchstaben an der gesucht werden soll!', Caption);
    edit2.text := '';
    Exit;
  end;

  n := GetBuchstabenAnzahl(a, s[1]);
  s := Format('Der Buchstabe %s ist %d mal enthalten.', [s, n]);
  MessageBox(s, Caption);
end;
  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 06:53 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 by Thomas Breitkreuz