Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kann Delphi jetzt kein s[1] mehr? (https://www.delphipraxis.net/43035-kann-delphi-jetzt-kein-s%5B1%5D-mehr.html)

derpepe 27. Mär 2005 23:09

Re: Kann Delphi jetzt kein s[1] mehr?
 
Zitat:

Zitat von SirThornberry
@derpepe: Hier mal eine bedeutend schnellere Variante zum zählen der Leerzeischen (da nicht bei jedem führenden Leerzeischen der String neu zusammengesetzt wird)
Delphi-Quellcode:
var LLen: Integer;
begin
  result := 1;
  LLen := Length(AStr);
  while (result < LLen) and (AStr[result] = ' ') do
    inc(result);
  dec(result);
end;

Korrigier mich, aber zählt diese Funktion nicht alle Leerzeichen in nem String?

derpepe 27. Mär 2005 23:10

Re: Kann Delphi jetzt kein s[1] mehr?
 
Kommando zurück!
Habs kapiert, sorry :oops:

Und da sag nochmal einer Programmieren sei keine Kunst!!

3_of_8 28. Mär 2005 11:09

Re: Kann Delphi jetzt kein s[1] mehr?
 
Zählen der Leerzeichen geht doch viel einfacher:

Delphi-Quellcode:
function countspaces(s: String): Integer;
begin
Result:=length(s)-length(trimleft(s));
end;
[edit=Christian Seehase] Delphi-Tags korrigiert. Mfg, Christian Seehase[/edit]

Khabarakh 28. Mär 2005 12:43

Re: Kann Delphi jetzt kein s[1] mehr?
 
Zitat:

Zitat von 3_of_8
Zählen der Leerzeichen geht doch viel einfacher:

Delphi-Quellcode:
function countspaces(s: String): Integer;
begin
Result:=length(s)-length(trimleft(s));
end;

Und wenn seine Strings steuerzeichenverseucht sind :mrgreen: ?

SirThornberry 28. Mär 2005 12:50

Re: Kann Delphi jetzt kein s[1] mehr?
 
Zitat:

Zitat von 3_of_8
Zählen der Leerzeichen geht doch viel einfacher:
Delphi-Quellcode:
function countspaces(s: String): Integer;
begin
Result:=length(s)-length(trimleft(s));
end;

es geht nicht um die einfachheit sondern um die performance. Und bei Trimleft wird auch wieder erst der speicher für den neuen String angefordert. Wenn man einen 2GB string hat der vorne nur ein leerzeichen hat ist deine Variante der performancekiller schlecht hinn weil dann für 2GB - 1 Byte speicher benötigt wird um das ergebnis von Trimleft zwischen zu speichern.

3_of_8 28. Mär 2005 16:08

Re: Kann Delphi jetzt kein s[1] mehr?
 
Tja, kommt halt drauf an, für was man es braucht.

Ich arbeite halt selten mit 2 GB Strings und bin auch noch nicht so erfahren.

Binärbaum 28. Mär 2005 16:18

Re: Kann Delphi jetzt kein s[1] mehr?
 
Nun, ich habe auch selten Strings der Größenordnung 2GB :mrgreen:
Aber im allgemeinen sind da (iterative) Verfahren, die direkt auf den Ausgangsstring zugreifen schneller als wenn man es an eine neue Funktion übergibt, da dafür, wie schon von SirThornberry gesagt, erst neuer Speicher angefordert werden muss.

MfG
Binärbaum

BlueStarHH 28. Mär 2005 16:24

Re: Kann Delphi jetzt kein s[1] mehr?
 
So wirds gemacht:

Delphi-Quellcode:
function countspacesinfront2(const s: string): Integer;
var
  i: Integer;
begin
  if Length(s) < 1 then
    Result := 0
  else
  begin
    i := 1;
    while (i <= Length(s)) and (s[i] = ' ') do
      Inc(i);
     Result := i - 1;
  end;
end;
Und die Testfälle:

Delphi-Quellcode:
  memo1.Lines.Add(IntToStr(countspacesinfront2('    Test')) + '=5');
memo1.Lines.Add(IntToStr(countspacesinfront2('    ')) + '=5');
memo1.Lines.Add(IntToStr(countspacesinfront2(' ')) + '=1');
memo1.Lines.Add(IntToStr(countspacesinfront2('')) + '=0');
memo1.Lines.Add(IntToStr(countspacesinfront2('Test')) + '=0');

Binärbaum 28. Mär 2005 16:26

Re: Kann Delphi jetzt kein s[1] mehr?
 
@blueStarHH:
Das ist doch irgendwie das selbe wie bei SirThornberry :!:

BlueStarHH 28. Mär 2005 16:32

Re: Kann Delphi jetzt kein s[1] mehr?
 
Zitat:

Zitat von Binärbaum
@blueStarHH:
Das ist doch irgendwie das selbe wie bei SirThornberry :!:

Nein, bei dem von SirThornberry ist ein Fehler drin. Test seine Function mal mit

Delphi-Quellcode:
  memo1.Lines.Add(IntToStr(countspacesinfront3(' ')) + '=1');
Bei SirThornberry kommt 0 raus. Muss aber 1 sein!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.
Seite 3 von 4     123 4      

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