|
#1
|
|||
|
|||
ПРоверка
У меня есть программа,определяющая корректность строки с числом,но мне надо ее переделать так,что если корректно число,то программа выведет тип(целое,целое со знаком,вещественное с фикс.точкой,вещественное с плавающей точкой).Пытался добавить флаг и case of ,но не вышло
Вот код Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) LabeledEdit1: TLabeledEdit; Button1: TButton; procedure Button1Click(Sender: TObject); // function IsSimpleInt(Str:String):Boolean; private { Private declarations } public { Public declarations } end; var Form1: TForm1; flag:Integer; //function IsSimpleInt(Str:String):Boolean; implementation {$R *.dfm} function IsIntWithoutSign(Str:String):Boolean; var i:Integer; //LabeledEdit1: TLabeledEdit; //Str:String; begin Result:=false; //Str:= Form1.LabeledEdit1.Text; if Str='' then exit; for i:=1 to Length(Str) do if not (Str[i] in ['0'..'9']) then exit; flag:=1; Result:=true; end; function IsIntWithSign(Str:String):Boolean; {var i:Integer; } begin //if Str[2]='.' then Result:=False; if (Length(Str)>0) and (Str[1] in ['+', '-']) {and (Str[2] in ['0'..'9'])} then Result:=IsIntWithoutSign(Copy(Str,2,Length(Str)-1)) else begin flag:=2; Result:=IsIntWithoutSign(Str); end; end; function IsFloatFixed(Str:String):Boolean; var i:Integer; begin if ((Length(Str)>1) and (Str[1]='.') and (Str[2] in ['+', '-'])) or ((Length(Str)>1) and( (Str[1]='.'))) or ((Length(Str)>1) and (Str[1] in ['+', '-']) and (Str[2]='.')) or (Str[Length(Str)]='.') then begin Result:=False; Exit; end; i:=Pos('.',Str); if i<>0 then Delete(Str,I,1); flag:=3; Result:=IsIntWithSign(Str); end; function IsFloatUFixed(Str:String):Boolean; var i:Integer; begin Str:=UpperCase(Str); i:=Pos('E',Str); if i=1 then begin Result:=False; exit; end; if i=0 then Result:=IsFloatFixed(Str) else begin flag:=4; Result:=IsFloatFixed(Copy(Str,1,I-1)) and IsIntWithSign(Copy(Str,I+1,Length(Str)-I)); end; end; procedure TForm1.Button1Click(Sender: TObject); begin if IsFloatUFixed(LabeledEdit1.Text) then begin case flag of 1: ShowMessage('целое'); 2: ShowMessage('целое со знаком'); 3: ShowMessage('вещественное с фиксированной точкой'); 4: ShowMessage('вещественное с плавающей точкой'); //ShowMessage('Корректно') end end else ShowMessage('Некорректно'); end; end. Это старый код до добавления case of Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) LabeledEdit1: TLabeledEdit; Button1: TButton; procedure Button1Click(Sender: TObject); // function IsSimpleInt(Str:String):Boolean; private { Private declarations } public { Public declarations } end; var Form1: TForm1; flag:Integer; //function IsSimpleInt(Str:String):Boolean; implementation {$R *.dfm} function IsIntWithoutSign(Str:String):Boolean; var i:Integer; //LabeledEdit1: TLabeledEdit; //Str:String; begin Result:=false; //Str:= Form1.LabeledEdit1.Text; if Str='' then exit; for i:=1 to Length(Str) do if not (Str[i] in ['0'..'9']) then exit; flag:=1; Result:=true; end; function IsIntWithSign(Str:String):Boolean; {var i:Integer; } begin //if Str[2]='.' then Result:=False; if (Length(Str)>0) and (Str[1] in ['+', '-']) {and (Str[2] in ['0'..'9'])} then Result:=IsIntWithoutSign(Copy(Str,2,Length(Str)-1)) else begin flag:=2; Result:=IsIntWithoutSign(Str); end; end; function IsFloatFixed(Str:String):Boolean; var i:Integer; begin if ((Length(Str)>1) and (Str[1]='.') and (Str[2] in ['+', '-'])) or ((Length(Str)>1) and( (Str[1]='.'))) or ((Length(Str)>1) and (Str[1] in ['+', '-']) and (Str[2]='.')) or (Str[Length(Str)]='.') then begin Result:=False; Exit; end; i:=Pos('.',Str); if i<>0 then Delete(Str,I,1); flag:=3; Result:=IsIntWithSign(Str); end; function IsFloatUFixed(Str:String):Boolean; var i:Integer; begin Str:=UpperCase(Str); i:=Pos('E',Str); if i=1 then begin Result:=False; exit; end; if i=0 then Result:=IsFloatFixed(Str) else begin flag:=4; Result:=IsFloatFixed(Copy(Str,1,I-1)) and IsIntWithSign(Copy(Str,I+1,Length(Str)-I)); end; end; procedure TForm1.Button1Click(Sender: TObject); begin if IsFloatUFixed(LabeledEdit1.Text) then ShowMessage('Корректно') else ShowMessage('Некорректно'); end; end. |
#2
|
|||
|
|||
Посмотрите в сторону Val() или TryStrTo...()
|
Этот пользователь сказал Спасибо nixon232 за это полезное сообщение: | ||
DayBreak (02.05.2018)
|