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.