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