@LoCrux:
es stimmt schon das wenn Bit 6 nicht gesetzt ist daß es eine Zahl sein könnte, aber es muß dennoch keine Zahl sein (ih weiße da nur mal auf die ganzen Steuerzeichen #0..#31 hin),
also einfach nur Bit 6 zu Prüfen reicht nicht aus.
@Reinhard Kern:
Zitat:
Nebenbedingungen sind z.B. dass + und - nur am Anfang auftreten dürfen
tut es doch
... siehe
(i = 1)
@Popov: hast schon Recht (es funktioniert zwar, aber wenn die 2 Assembleranweisungen je durchgang für i=1 gesparrt würde, dann wär's schon etwas optimaler)
Und es wäre bestimmt nicht schlecht, wenn bei Auffinden eines unzuläßigen Zeichens die Schleife abgebrochen (siehe Break) würde
Delphi-Quellcode:
B := (S <> '') and (S[1] in ['+', '-', '0'..'9']);
For i := 2 to Length(S) do
If not (S[i] in ['0'..'9']) Then Begin
B := False;
Break;
End;
If B Then {istZahl}
ein Punkt war zwar nicht mit in der "Aufgabenstellung" zu erkennen, aber was soll's:
Delphi-Quellcode:
B := (S <> '') and (S[1] in ['+', '-', '0'..'9']);
B2 := True;
For i := 2 to Length(S) do
If not (S[i] in ['0'..'9']) Then
If B2 and (S[i] = '.') and (i < Length(S)
and (S[i - 1] in ['0'..'9'])
and (S[i + 1] in ['0'..'9']) Then
B2 := False
Else Begin
B := False;
Break;
End;
If B Then {istZahl}
oder
Delphi-Quellcode:
B := (S <> '') and (S[1] in ['+', '-', '0'..'9']);
B2 := True;
For i := 2 to Length(S) do
If not (S[i] in ['0'..'9']) Then
If B2 and (S[i] = '.') and (i < Length(S))
and ((i > 2) or (S[1] in ['0'..'9'])) Then
B2 := False
Else Begin
B := False;
Break;
End;
If B Then {istZahl}
oder das vorherigge nochmal mit PChar
Delphi-Quellcode:
Var P: PChar;
i, i2: Integer;
B, B2: Boolean;
i2 := Length(S);
P := PChar(S);
B := (i2 <> 0) and (P^ in ['+', '-', '0'..'9']);
B2 := True;
For i := 2 to i2 do Begin
Inc(P);
If not (P^ in ['0'..'9']) Then
If B2 and (P^ = '.') and (i < i2)
and ((i > 2) or (S[1] in ['0'..'9'])) Then
B2 := False
Else Begin
B := False;
Break;
End;
End;
If B Then {istZahl}
(ich hoffe letzteres stimmt ... hab's jetzt nur aus'm Kopf umgeschrieben und nicht getestet)
und hier nochmal die PChar-Variante ohne Punkt:
Delphi-Quellcode:
Var P: PChar;
i, i2: Integer;
B, B2: Boolean;
i2 := Length(S);
P := PChar(S);
B := (i2 <> 0) and (P^ in ['+', '-', '0'..'9']);
For i := 2 to i2 do Begin
Inc(P);
If not (P^ in ['0'..'9']) Then Begin
B := False;
Break;
End;
End;
If B Then {istZahl}