Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.063 Beiträge
 
Delphi XE2 Professional
 
#21

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

  Alt 30. Nov 2007, 12:41
Na, dann will ich auch noch mal was beisteuern.
Dürfte um ca. 25 % schneller sein als optimale Pascal-Lösungen

Als gültig werden Strings erkannt, die
a) nur Ziffern enthalten, aber mindestens eine Ziffer
b) als erstes Zeichen ein Vorzeichen haben, dem mindestens eine Ziffer folgt

Delphi-Quellcode:
FUNCTION IsSignedInteger(s:string):boolean;
asm
            test eax,eax
            je @Exit // s=NIL
            cmp [eax-4],0 // geändert auf Wunsch des Erstellers
            je @Fail // s hat Länge 0
            mov edx,eax
            mov ax,[edx] // AL=erstes Zeichen, AH=zweites Zeichen
            add edx,2
            cmp al,'-'
            je @HasSign
            cmp al,'+'
            jne @NoSign
@HasSign: add ah,$D0
            sub ah,$0A
            jb @Loop // Nach Sign folgt Ziffer
@Fail: xor eax,eax // Fehler
            jmp @Exit
@NoSign: add al,$D0
            sub al,$0A
            jae @Fail // erstes Zeichen nicht '0'..'9','-','+'
            jmp @Entry
@Loop: mov ax,[edx]
            add edx,2
            add al,$D0
            sub al,$0A
            jae @CheckEnd // nicht '0'..'9'
@Entry: add ah,$D0
            sub ah,$0A
            jb @Loop // ist '0'..'9'
            sub ah,$D0-$0A
            je @True // Ist 0 Byte (Ende vom String)
@CheckEnd: sub al,$D0-$0A
@True: sete al
@Exit:
end;
[edit=MrSpock]3. ASM Befehl auf Wunsch des Erstellers geändert. Mfg, MrSpock[/edit]
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat