,新手,Delphi 用栈处理字符串匹配有关问题,求大神
紧急求助,新手,Delphi 用栈处理字符串匹配问题,求大神
现在的一个form的procedure 中要对一个字符串 进行括号匹配检测,boss叫用栈做,本身字符串中就一对括号()。
想来想去对于Delphi中的指针不甚了解。无从下手,求大神帮忙,急
------解决思路----------------------
栈:原理是FILO。也就是先进后出,每次出栈都是出堆栈里面最后进栈的那个元素。
所以,堆栈的两个基本函数就是PUSH和OUT
function PUSH(NewElement:TStack;var Statck:TStack):Boolean;
begin
NewElement:=New(TStack);
NewElement.Next:=Statck;
Stack:=NewElement;
Result:=True;
end;
function OUT(var OutElement:TStack;var Statck:TStack):Boolean;
begin
OutElement:=Statck;
Stack:=Statck.Next;
Result:=True;
end;
以上代码只是演示,并未上机测试
------解决思路----------------------
然后,对你说的字串具体处理的思路不是很明白
------解决思路----------------------
先执行PUSH,堆栈中就成了:)0(((()(DNA10
再用OUT找出第一个右括号,寻找过程中,如果先出现左括号——非法;寻找过程中,遇到第二个右括号,递归
继续OUT找出第一个左括号,判断出栈的元素是否为合法表达式,递归返回
记住,递归过程中需要记录当前括号中的字符
这是大概的算法,实际代码没有空去帮你想啊,自己努力吧
------解决思路----------------------
这是一个算法的书面讲解,实际的内容需要你自己定义好才行
TStack是上课时候老师对堆栈的统称
实在没有概念的,要找PASCAL的书来看才行,DELPHI的书很少说到这些基础算法的,而且年份最好是在9x年代的说的最多
------解决思路----------------------

首先分段,一个字符一个字符的匹配,只要匹配到括弧,就入栈,比如123(34)进入堆栈为
123
(
34
)
这样的结构,最开始先将正反括弧的个数都记录,如果正反括弧个数就不等,就说明肯定不匹配,后面不用管了,直接退出,否则一个一个的字符串出栈,然后进行匹配,也就是计算进入的括弧的个数,然后出来一个对应的反括弧,就对应的减法,最终应该是双向平衡的。就匹配完成
------解决思路----------------------
现在的一个form的procedure 中要对一个字符串 进行括号匹配检测,boss叫用栈做,本身字符串中就一对括号()。
想来想去对于Delphi中的指针不甚了解。无从下手,求大神帮忙,急
------解决思路----------------------
栈:原理是FILO。也就是先进后出,每次出栈都是出堆栈里面最后进栈的那个元素。
所以,堆栈的两个基本函数就是PUSH和OUT
function PUSH(NewElement:TStack;var Statck:TStack):Boolean;
begin
NewElement:=New(TStack);
NewElement.Next:=Statck;
Stack:=NewElement;
Result:=True;
end;
function OUT(var OutElement:TStack;var Statck:TStack):Boolean;
begin
OutElement:=Statck;
Stack:=Statck.Next;
Result:=True;
end;
以上代码只是演示,并未上机测试
------解决思路----------------------
然后,对你说的字串具体处理的思路不是很明白
------解决思路----------------------
先执行PUSH,堆栈中就成了:)0(((()(DNA10
再用OUT找出第一个右括号,寻找过程中,如果先出现左括号——非法;寻找过程中,遇到第二个右括号,递归
继续OUT找出第一个左括号,判断出栈的元素是否为合法表达式,递归返回
记住,递归过程中需要记录当前括号中的字符
这是大概的算法,实际代码没有空去帮你想啊,自己努力吧
------解决思路----------------------
这是一个算法的书面讲解,实际的内容需要你自己定义好才行
TStack是上课时候老师对堆栈的统称
实在没有概念的,要找PASCAL的书来看才行,DELPHI的书很少说到这些基础算法的,而且年份最好是在9x年代的说的最多
------解决思路----------------------
首先分段,一个字符一个字符的匹配,只要匹配到括弧,就入栈,比如123(34)进入堆栈为
123
(
34
)
这样的结构,最开始先将正反括弧的个数都记录,如果正反括弧个数就不等,就说明肯定不匹配,后面不用管了,直接退出,否则一个一个的字符串出栈,然后进行匹配,也就是计算进入的括弧的个数,然后出来一个对应的反括弧,就对应的减法,最终应该是双向平衡的。就匹配完成
------解决思路----------------------