![]() |
Re: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?
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:
[edit=MrSpock]3. ASM Befehl auf Wunsch des Erstellers geändert. Mfg, MrSpock[/edit]
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; |
Re: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?
@LoCrux: OK, wenn wirklich nur Zahlen und Buchstaben drin sind, dann sag ich nichts dagegen :angel:
|
Re: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?
@Amateurprofi:
SPEEDFREAK :chat: :bouncing4: :bounce1: :bounce2: :bouncing4: :bounce1: :bounce2: :bouncing4: :bounce1: :bounce2: :bouncing4: :bounce1: :bounce2: |
AW: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?
Und wie kann man testen ob ein String eine Zahl darstellt, wenn jene Zahlen auch negativ (mit vorangestelltem Minus) sein können und vom Typ Integer oder Real sein können (also mit Kommastellen, wobei das Komma je nach Land durch ein Komma oder einen Punkt dargestellt sein kann)? Gleichzeitig will ich aber Strings wie die nachfolgenden "Un"-Zahlen ausschließen:
- "12-3" - "123-" - "123." - "1.2.3" - "1-2-3" - "-.-" Bei meinem Problem kann ich mit Schleifen arbeiten. Nur der Algorithmus fällt mir nicht ein. |
AW: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?
Das Einfachste:
![]() ![]() ![]() ![]() Ansonsten einfach alles nacheinander prüfen und schauen, ob was Richtiges/Falsches drin vorkommt.
Delphi-Quellcode:
Das läßt sich natürlich noch ein bissl hübscher zusammenfassen.
Result := False;
i := 1; if (i <= Length(S)) and (S[i] in ['+', '-']) then Inc(i); if (i > Length(S)) or not (S[i] in ['0'..'9']) then Exit; while (i <= Length(S)) and (S[i] in ['0'..'9']) do Inc(i); if (i <= Length(S)) and (S[i] = DecimalSeparator) then begin Inc(i); if (i > Length(S)) or not (S[i] in ['0'..'9']) then Exit; while (i <= Length(S)) and (S[i] in ['0'..'9']) do Inc(i); end; Result := i > Length(S); |
AW: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?
|
AW: Zeichenkette Prüfen ob gültige Zahl ohne Umwandeln?
@himitsu & alle anderen:
Das Post von SvenLittkowski wurde von ihm auch in einem eigenen Thread gepostet, der unter dem Namen ![]() PS: Ach DeddyH ...... :p |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:58 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-2025 by Thomas Breitkreuz