分隔符匹配简单程序将无法正常工作

时间:2014-09-17 22:29:10

标签: c++ stream delimiter

我已经看了好几个小时了。该程序将编译,它无法正确检测错误。由于某些原因,当我输入嘿嘿[或嘿{]等时,它会起作用。但它不会为嘿[)或嘿{]工作。显然在所有情况下它都应该检测到错误,但出于某种原因,在“嘿嘿”之后的空间。有所作为。

#include<iostream>
#include <stack>
using namespace std;

bool delimiterMatching(char *file){
  stack<char> x;
  int count = 0;
  char ch, onTop, check;
  while(ch != '\0'){
    ch = file[count];
    if (ch == '(' || ch == '[' || ch == '{')
      x.push(ch);
    else if (ch == ')' || ch ==  ']' || ch == '}') {
      onTop == x.top();
       x.pop();
      if((ch==')' && onTop!='(') || (ch==']' && onTop!='[') || (ch=='}' && 
                                onTop!= '{'))
    return false;
    }
  count++;
  }

  if (x.empty())
    return true;
  else 
    return false;

}


int main()
{
  char *test = new char();
  cout << "enter sentence: ";
  cin >> test;

  if (delimiterMatching(test))
    cout << "success" << endl;
  else 
    cout << "error" << endl;

  return 1;
}

1 个答案:

答案 0 :(得分:0)

使用cin >> test你不会得到一个完整的句子,但只有一个字符串,直到cin遇到空格。因此,如果您键入(hey ),那么最好是(hey,而右括号只会被下一个>>读取,而(hey)会按预期工作。

您的test分配存在第二个问题,对于合理的输入而言可能太短。

按如下方式更改main():

char *test = new char[256];   // enough space.  COnsider also string  
cout << "enter sentence: ";
cin.getline(test, 256);       // full line input. 
...

delimiterMatching()中还有两个令人讨厌的错误。

  • 首先,在ch条件下使用未初始化的while。将ch初始化为非零字符,或使用while (file[count])
  • 您是否注意到onTop == x.top();?不应该是onTop = x.top();吗?