Проверить правильность расстановки скобок - C (СИ)
Формулировка задачи:
Не знаю в чем ошибка, программа не работает. Подскажите пожалуйста))
/* Проверить правильность расстановки скобок. */
#include <iostream>
#include <stack>
#include <string.h>
using namespace std;
int main() {
stack <char > s;
char * string = new char[300];
cout<<"Enter string: "<<endl;
cin>>string;
s.top()=0;
for (int i=0; i!='\0'; i++)
{
if ((string[i]=='(')||(string[i]=='[')||(string[i]=='{'))
s.push(string[i]);
else
if ((string[i]==')')||(string[i]==']')||(string[i]=='}'))
{
if (s.top()==0){
cout<<"Disbalans bolshe zakritix skobok"<<endl;
break;
}
}
else
s.pop();
if ((string[i]== ')') && ((s.top=='{') || (s.top=='['))) {
cout<<"Nesoootvetstvie tipa"<<endl;
break;
}
if ((string[i]== '}') && ((s.top=='(') || (s.top=='['))){
cout<<"Nesoootvetstvie tipa"<<endl;
break;
}
if ((string[i]== ']') && ((s.top=='{') || (s.top=='('))){
cout<<"Nesoootvetstvie tipa"<<endl;
break;
}
if (s.top() == 0)
cout<<"Balans"<<endl;
else
cout<<"Disbalans bolshe otkritix skobok"<<endl;
while (s.top()!=0)
{
s.pop();
cout<<string[i];
}
}
return 0;
}Решение задачи: «Проверить правильность расстановки скобок»
textual
Листинг программы
#include <iostream>
#include <stack>
#include <string.h>
using namespace std;
int main() {
stack <char > s;
char * string = new char[300];
cout<<"Enter string: "<<endl;
cin>>string;
for (int i=0; string[i]!=0; i++)
{
if ((string[i]=='(')||(string[i]=='{')||(string[i]=='['))
s.push(string[i]);
else
if ((string[i]==')')||(string[i]=='}')||(string[i]==']'))
if (s.empty())
{
cout<<"Disbalans bolshe zakritix skobok"<<endl;
exit(0);
}
else
s.pop();
if ((string[i]== ')') && ((s.top=='{') || (s.top=='[')))
{
cout<<"Nesoootvetstvie tipa"<<endl;
exit(0);
}
if ((string[i]== '}') && ((s.top=='(') || (s.top=='[')))
{
cout<<"Nesoootvetstvie tipa"<<endl;
exit(0);
}
if ((string[i]== ']') && ((s.top=='{') || (s.top=='(')))
{
cout<<"Nesoootvetstvie tipa"<<endl;
exit(0);
}
}
if (s.size()==0)
cout<<"Balans"<<endl;
else
cout<<"Disbalans bolshe otkritix skobok"<<endl;
//}}}
return 0;
}
Объяснение кода листинга программы
Код проверяет правильность расстановки скобок в строке, введенной пользователем.
- Создается стек
sдля хранения символов скобок. - Вводится строка
string. - Происходит итерация по каждому символу строки.
- Если текущий символ является скобкой, он добавляется в стек.
- Если текущий символ является закрывающей скобкой ('), закрывающей скобкой двойных кавычек (
}), или закрывающей скобкой квадратных кавычек (']'), и стек пуст, выводится сообщение об ошибкеDisbalans bolshe zakritix skobokи программа завершается. - Если текущий символ является открывающей скобкой (('{') или ('[')), и в стеке есть элемент, который является закрывающей скобкой для этой открывающей скобки, выводится сообщение об ошибке
Nesoootvetstvie tipaи программа завершается. - Если в стеке остались элементы, выводится сообщение
Disbalans bolshe otkritix skobok. - Если стек пуст, выводится сообщение
Balans.