Скобки сбалансированы или нет! В C ++

У меня возникли некоторые проблемы с этим алгоритмом проверки, сбалансирована ли строка скобок или нет. Мне нужно взять входные данные из текстового файла и показать выходные данные в другом текстовом файле. У меня возникли проблемы с этим алгоритмом. Пожалуйста, помогите мне выяснить проблему

#include <iostream>
#include <string.h>
#include <fstream>
#include "stack.h"#include "stack.cpp"using namespace std;
int main() {
StackType<char> c;
ifstream inFile("parentheses.txt");
ofstream outFile("report.txt");
int i, N;
char str[500];
inFile >> N;
inFile >> str;
while (str[i]) {
for (int i = 0; str[i] != '\0'; i++) {
if ((str[i] == '(') || (str[i] == '{') || (str[i] == '[')) {
c.Push(str[i]);
} else if ((str[i] == ')') || str[i] == '}' || str[i] == ']') {
if (c.isEmpty() == 1)
outFile << "Parentheses are not Balanced" << endl;
else if ((str[i] == ')' && str[i] == '(') ||
(str[i] == '}' && str[i] == '{') ||
(str[i] == ']' && str[i] == '[')) {
c.Pop();
} else
outFile << "Parentheses are not Balanced" << endl;
}
}
i++;
}
if (c.isEmpty() == 1)
outFile << "Parentheses are Balanced" << endl;
else
outFile << "Parentheses are not Balanced" << endl;
}

0

Решение

Я могу с уверенностью сказать, что это:

if((str[i] == ')' && str[i]  == '(') || (str[i] == '}' && str[i] == '{') || (str[i] == ']' && str[i] == '['))

неверно, так как всегда будет ложным. Я предполагаю, что вы имеете в виду что-то вроде:

if ((c.Top() == '(' && str[i] == ')' || ...)
1

Другие решения

Ваш код никогда не будет вызывать «Pop» в данный момент, потому что вы сравниваете str [i] с самим собой, ожидая, что это будут два разных значения.

Вместо этого вы должны сравнивать stri [i] с тем, что находится на вершине вашего стека.

0

По вопросам рекламы [email protected]