int main() {
ifstream infile;
infile.open("input.txt");
string exp;
cout << "Enter an expression ";
while (getline(infile, exp)) {
cout << exp << ": ";
if (matcher(exp))
cout << "Matched ok" << endl;
else
cout << "Match error" << endl;
cout << "Enter an expression: ";
}
cout << "--- Done ---" << endl;
return 0;
}
int matcher(string expression) {
stack<char> s;
for (int i = 0; i < expression.length(); i++) {
if (isOpener(expression[i]))
s.push(expression[i]);
else if (isCloser(expression[i])) {
if (s.empty()) return 1;
char opener = s.top();
s.pop();
if (!matches(opener, expression[i])) return 1;
}
}
if (!s.empty()) return 1;
return 0;
}
答案 0 :(得分:1)
一个显而易见的问题 - 您的matcher
函数似乎返回1
表示失败(不匹配),0
表示成功,但您的main
打印{{1如果ok
返回非零...
答案 1 :(得分:0)
我会假设isOpener()
和matches()
按预期工作,因为您没有显示它们。
如果是这样,问题在于您错误解释了int -> bool
次转化。零转换为false
,非零整数转换为true
。您最好声明matcher()
返回bool
并直接从中返回true
或false
。您希望在false
返回1
,然后返回true
和0
,现在返回{{1}}。