Einzelnen Beitrag anzeigen

Benutzerbild von LoCrux
LoCrux

Registriert seit: 5. Mär 2007
Ort: Gwang-Yang-City
48 Beiträge
 
Delphi 2009 Enterprise
 
#9

Re: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?

  Alt 29. Nov 2007, 02:14
Ok,

abgesehen von dem Speicherproblem mal ein Loesungsvorschlag.
hier sei ein Hoch auf die "Definitoere" der ASCII-Konvention. Tja, die Jungs haben sich noch was gedacht.

Ich definere einfach mal, dass (wie in deinem Beispiel) in dem "Zahlenstring" NUR ZIFFERN UND BUCHSTABEN
aber keine Sonderzeichen Vorkommen (<30h);
+ und - werden ignoriert, da als Vorzeichen immer an erster Position.;

Delphi-Quellcode:
// ADA. Quellcode-Tag zwecks Leerzeichenformatierung //

______Bit_76543210
          ||||||||
0 = 30h = 00110000b
1 = 31h = 00110001b
.
.
9 = 39h = 00111001b

@ = 40h = 01000000b
A = 41h = 01000001b
.
.
' = 60h = 01100000b
a = 61h = 01100001b
.
.
usw.. Man richte jetzt sein Augenmerk auf Bit 6.
Zahlen: Bit 6 = 0;
Buchstaben: Bit 6 = 1; Grossbuchstben: Bit 5 = 0;
Kleinbuchstaben Bit 5 = 1;
Damals war halt Rechenzeit knapp und Bit- & Boolesche-Operationen sind immer am schnellsten.
Du must also nicht deinen ganzen String duchlaufen. Definiere eine Bitmaske.

Delphi-Quellcode:
function NumStr(s:String):Boolean;
var
  i,l : Integer;
const
  mask = $40; // = 01000000b
begin
  result := true;
  i := 1;
  l := Length(s)+1;
  while (result and (i<l))
  do begin
    result := (mask and ORD(s[i]))<mask;
    inc(i);
  end;
end;
Und & Vergleichsoperationen:
Im besten Fall n=2 , im schlimmsten fall n=Length(s)*2 Operationen.
“C++ is an insult to the human brain.” [Niklaus Wirth]

2B OR NOT 2B (.. THAT IS FF)
  Mit Zitat antworten Zitat