Danke Luckie für die schnelle Antwort!
Ich ist für mich ein wenig schwer, dies umzusetzen, aber ich glaube zu verstehen was Du meinst:
Delphi-Quellcode:
program test;
{$APPTYPE CONSOLE}
uses SysUtils;
// Dies ist unser ErgebnisTyp:
type r=(Leer,Ziffer,Zeichen,AlphaNum);
function CheckStr(Str:string):r;
type typ=set of Char;
var
i:Integer;
ZiffernSet:typ;
ZeichenSet:typ;
ZiffernFlag:Boolean;
ZeichenFlag:Boolean;
AlphaNumFlag:Boolean;
label Ende;
begin
// "Fehlerbehandlung"
If Str=''then begin Result:=Leer;goto ende;end;
//// Hauptteil
// Flags
ZiffernSet:=['0'..'9'];
ZeichenSet:=['a'..'z','A'..'Z'];
// Sets
ZiffernFlag:=False;
ZeichenFlag:=False;
AlphaNumFlag:=False;
for i:=1 to Length(Str) do
begin
if str[i] in ZiffernSet then ZiffernFlag :=True;
if str[i] in ZeichenSet then ZeichenFlag:=True;
//Wenn ZiffernFlag und Zeichenflag =True sind Result setzen und Goto ProgrammEnde;
if Zeichenflag =True and ZiffernFlag=True then
begin
result:=AlphaNum;
goto ende;
end;
end;
// Bei einem Break würde es hier weitergehen!
if ZiffernFlag=True then Result:=Ziffer;
if ZeichenFlag=True then Result:=Zeichen;
// ProgrammEnde
Ende:
end;
begin
//Zum Testen:
Writeln(Ord(checkstr('')));readln;
Writeln(Ord(checkstr('190')));readln;
writeln(Ord(checkstr('az')));readln;
Writeln(Ord(checkstr('az10')));readln;
// Als Ergebnisse werden 0, 1, 2, und 3 angezeigt.
// Entspricht dem Code: type r=(Leer,Ziffer,Zeichen,AlphaNum);
end.
@jfheins
Zu 1: Verstehe nicht was Du meinst.
Zu 2: Zum Leerstring: Wird unter "//Fehlerbehandlung" doch beachtet.
Zu 3: Einrückungen und Formatierungen sind meine Eigenheiten.
Zu 4: Gute Idee: Code geändert!
Zu 5: "Break" verlässt eine for-, while- oder repeat-Schleife. Dies würde hier nicht passen.
zu 6: Typrückgabe nun im Code.
Noch Verbesserungen?