0

I am making a c++ console app and my issue is that I can not get my braces to match and equal to true when compared to the stack holding the first pair of braces.The method where this algorithm is inserted in has a vector token parameter I have written and rewritten my code several times. In the following post,I am placing a very simple piece of code to show some idea of what i am trying todo:

stack deli;

for (size_t i=0; i<ie.size(); i++) {        
    if(ie[i].value =="{"|| ie[i].value =="(" || ie[i].value =="[")  

     {deli.push(ie[i].value);

        if(deli.top() != "}" || deli.top() != ")" || deli.top() != "]"){
        return false;
           deli.pop(); 
        }

          if(deli.top() == "}" || deli.top() != ")" || deli.top() != "]"){
              return true;
        }

    }


}//end of for loop
4

3 回答 3

0

您的代码逻辑似乎有一些问题。我不清楚你想做什么。无论如何,我将帮助确定您的代码的一些遗漏点。

  • 你想按条件做什么

if(deli.top() != "}" || deli.top() != ")" || deli.top() != "]"){ 我觉得有点不对劲。“不等于”与“或”

  • 您的代码永远不会到达下一行。因为函数在前行返回。

    deli.pop();

  • 在这种情况下你会尝试做什么

    if(deli.top() == "}" || deli.top() != ")" || deli.top() != "]"){

对我来说,Equl 和 Not Equl看起来有些不对劲

如果你用语言解释你需要做什么,其他人可以帮助你

于 2013-09-23T06:05:42.103 回答
0

您的代码肯定不会工作,因为您没有将一种类型的括号与其他类型匹配,而是将任何类型的括号与任何其他类型匹配。
一种解决方案是在找到它们时计算大括号、方括号、括号,当它们的计数匹配时。
其他解决方案是更通用的一种,与编译器构造有关。如果您研究过该主题,您应该能够编写一个无竞赛语法并将其转换为确定性有限自动机(DFA),然后编写程序来解析输入。它需要一些深入的研究,但确实很有帮助。

于 2013-09-23T06:28:18.943 回答
0

我假设这是为了分配?

以下是一些提示:

  • 通过使用 if/else if 语句之类的方法,将获得左括号的情况与获得右括号的情况分开

  • 当你得到一个开括号时,你想把它推到堆栈上,应该就是这样

  • 当你得到一个右括号时,你想验证堆栈的顶部是否有相同类型的关联左括号(如果这与你相关),并通过弹出堆栈删除该左括号。

  • 当循环结束时,堆栈应该是空的,否则会出错

你可能想要这个结构:

for (size_t i=0; i<ie.size(); i++)
{
    if (/*conditions for open brackets*/) 
    {
        //Push the bracket on the stack
    }
    else if (/*conditions for closing brackets*/)
    {
        //Check the top of the stack if there is an opening bracket
        //If so, pop the stack. If not, error.
    }
}
于 2013-09-23T05:34:18.007 回答