Delphi中⽤状态图对字符串数据进⾏类型判断Delphi中⽤状态图对字符串数据进⾏类型判断
在我们写程序时总是会遇到对字符串进⾏数据类型判断,如:整型,浮点型等。⽽我们可是⽤状态图<;图1>的⽅法来对字符串数据进⾏类型判断。
对字符串进⾏类型判断我们⼀般需要对它进⾏解析,在解析过程中我们需要标识出它现在的状态和下次它可以出现在状态,如整型,浮点型。在解析完后我们可以得出它最后的状态,这样我们对它的类型判断的结果就是它那个最后的状态,通过这个我们可以达到举⼀反三的效果。
图1
图中有五个⼩圆圈表⽰五种状态(虚线的圆圈表⽰中间状态,实线圆圈表⽰最终状态。当然还有⼀种状态我没有画出来:⾮数据类型),它们分别是:StateInit(开始),StateDiag(符号),stateDot(⼩数点),StateInt(整型),stateFloat(浮点型),箭头表⽰字符串的解析流程,长⽅型表⽰解析的每个字符。
我们举个例⼦来说说吧!如字串:”-19.2”。把它解析成‘-’→‘1’→‘9’→‘.’→‘2’。根据图1:开始状态为stateInit,解析第⼀个字符‘-’ →得到它的状态为StateDiag,
解析第⼆个字符‘1’ →得到它的状态为StateInt,解析字符‘9’ →得到它的状态为StateInt,解析字符‘。’→
得到它的状态为StateFloat→…→得到它最后的状态为StateFloat。这样我们就得到了最终结果:这个字符串对应的是浮点型的数据。下⾯是Delphi源码<;仅供参考>:
{******************************
2010考研英语真题//author = py
//time = 20/06/04
//function = Is integer(float) or not in string;
*******************************}
unit Pfunction;
interfacentt docomo
//us windows;
{*result: 0. Integer
* 1. float
* -1. error}
function isNumberOrFloat(aEnterStr: PChar): Integer;
implementation
function isNumberOrFloat(aEnterStr: PChar): integer;
function isNumber(aNum: char): boolean;
begin
acaciaresult := fal;
if (aNum >= '0') and (aNum <= '9') then
result := true;
end;
function isSymbol(aNum: char): boolean;
begin
英文cms
result := fal;
if ((aNum = '+') or (aNum = '-')) then
result := true;
end;
function isDot(aNum: char): boolean;
begin
result := fal;
if (aNum = '.') then
result := true;
end;
type TStateBit = (STATEINIT, STATEINT, STATEDIAG, STATEDOT, STATEFLOAT, ERROR); //static enum var mCh: char; // char of string
mI: integer; //circle num
mInx: integer; //length of string;
mState: TStateBit ; //current state
begin
mInx := Length(aEnterStr);
mState := STATEINIT;
result := -1;
for mI := 0 to mInx-1 do
begin
mCh := aEnterStr[mI];
ca mState of
STATEINIT:begin
if isNumber(mCh) then begin
mState := STATEINT;
end
el if (isSymbol(mCh)) then begin
mState := STATEDIAG;
end
el if isDot(mCh) then begin
mState := STATEDOT;
end
el mState := ERROR;
end;
STATEINT: begin
if isDot(mCh) then begin冷焰
mState := STATEFLOAT;
end
el if (isNumber(mCh))then begin
mState := STATEINT;
end
阿根廷英文el mState := ERROR;
end;
如何提高工作执行力
潍坊日向友好学校
STATEDIAG:begin
if isNumber(mCh) then begin
mState := STATEINT;
end
el if isDot(mCh) then begin
mState := STATEDOT;
end
el mState := ERROR;
end;
STATEDOT: begin
if isNumber(mCh) then begin
mState := STATEFLOAT;
end
unluckyel mState := ERROR;
end;
STATEFLOAT:begin
if isNumber(mCh) then begin
mState := STATEFLOAT;
end
el mState := ERROR;
end;
end;
end;
if (mState = STATEINT) then result := 0圣诞节歌
el if (mState = STATEFLOAT) then result := 1; end;
end.