就是检查括号()[]{}之间的匹配情况
如果文件很大的话,如何快速的找出是否匹配正确?
a.t.t 3x
如果文件很大的话,如何快速的找出是否匹配正确?
a.t.t 3x
解决方案 »
- 郁闷了,这个问题请高手帮忙了!!
- 请教一下delphi方面adodateset 中设置空字段后在 cxGrid1DBTableView1显示checkbox间的问题
- 如何在最上层的模式窗体上点击一个按钮,关闭除主窗体之外的所有窗体??
- 如何控制ScrollBar,使其按一定的速度向下滚动!高分答谢!
- 大家能告诉我数据库管理员(DBA)都做些什么工作吗?有前途吗?
- 关于在程序中发送电子邮件附件的问题
- SAMPLE QUESTION 在DELPHI中如何使用其他语言开发的主见?
- 高手们!ListView中怎么控制网格高度?怎么得到网格尺寸和坐标(Rect)?
- 我现在才刚开始学习Delphi不久,很希望和喜欢Delphi的朋友交流一下,做朋友!
- Help!操作Paradox数据库时,如何限制返回的记录数?
- 新手提问送分了!关于DBGrid的颜色问题!(高手帮忙吧!!)
- 如何取得拨号连接成功的事件
SysUtils,
Contnrs;type
TCharStack = class(TStack)
private
function GetTop: Char;
public
function Pop: Char;
function Push(Item: Char): Char;
property Top: Char read GetTop;
end;{ TCharStack }function TCharStack.GetTop: Char;
begin
Result := Char(Peek);
end;function TCharStack.Pop: Char;
begin
Result := Char(inherited Pop);
end;function TCharStack.Push(Item: Char): Char;
begin
Result := Char(inherited Push(Pointer(Item)));
end;function FindFirstOf(const Str: String; const CharSet: TSysCharSet; StartPos: Integer = 1): Integer;
begin
Result := StartPos;
while (Result <= Length(Str)) and not (Str[Result] in CharSet) do
Inc(Result);
if Result > Length(Str) then
Result := 0;
end;const
NPos = 0;
FindSet = ['(',')','{','}','[',']'];
var
Stack: TCharStack;
Line: String;
Inf: TextFile;
Pos: Integer;
LineNumber: Integer = 0; procedure Check;
begin
while not Eof(inf) do
begin
ReadLn(inf, Line);
Pos := FindFirstOf(Line, FindSet);
while(Pos <> NPos) do
begin
case Line[Pos] of
'(', '[', '{':
Stack.Push(Line[Pos]);
')':
if (Stack.Count = 0) or (Stack.top <> '(') then
begin
WriteLn('Error:', LineNumber, ':', Copy(Line, 1, Pos));
Halt;
end
else
Stack.Pop();
']':
if (Stack.Count = 0) or (Stack.top <> '[') then
begin
WriteLn('Error:', LineNumber, ':', Copy(Line, 1, Pos));
Halt;
end
else
Stack.Pop();
'}':
if (Stack.Count = 0) or (Stack.top <> '{') then
begin
WriteLn('Error:', LineNumber, ':', Copy(Line, 1, Pos));
Halt;
end
else
Stack.Pop();
end;
Pos := FindFirstOf(Line, FindSet, Pos +1);
end;
Inc(LineNumber);
end;
if Stack.Count > 0 then
WriteLn('Error!')
else
WriteLn('OK!');
ReadLn;
end;
begin
AssignFile(inf, 'e:\utilcls.h');
Reset(Inf);
Stack := TCharStack.Create;
try
Check;
except
end;
Stack.Free;
CloseFile(Inf);
end.