Консультация № 159620
04.02.2009, 18:48
0.00 руб.
0 3 3
Проверить, одинаковое ли количество открывающихся и закрывающихся скобок в данной строке.

Обсуждение

Неизвестный
04.02.2009, 19:32
общий
это ответ
Здравствуйте, Ryabichko!
try this:)
......
char str[];//my string
int num=0, i=0;
...
while(str[i]!='\0')
{
if(str[i] == '(' ) ++num;
else if(str[i] == ')' ) --num;
++i;
}

if(num == 0){/*there are equal number of '(' and ')' symbols*/}
else....
Неизвестный
04.02.2009, 20:04
общий
это ответ
Здравствуйте, Ryabichko!
Вот простой вариан решения.
Компилировано в MS VS 2005.
Будут вопросы, задавайте в минифоруме.
Код:

#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;

int main()
{
setlocale(LC_CTYPE, "Russian");

char str[100];
cout << "Введите строку:";
gets(str);


char* ch = str;
int count = 0; //счетчик скобок

while(*ch){
if(*ch == '(')
count++;
if(*ch == ')')
count--;
ch++;
}

if(count == 0)
cout << "\nВ строке одинаковое количество открывающихся и закрывающихся скобок";
if(count < 0)
cout << "\nВ строке больше закрывающихся скобок";
if(count > 0)
cout << "\nВ строке больше открывающихся скобок";

_getch();
return 0;
}


Неизвестный
06.02.2009, 04:27
общий
это ответ
Здравствуйте, Ryabichko!

Могу добавить, что если необходим еще и грамматический анализ скобок, то закрывающихся скобок никогда не должно быть больше открывающихся. То есть, предыдущий пример достаточно изменить так:

if(*ch == ')')
{
if(count!=0)
count--;
else
{
cout << "Неверное вложение скобок";
return;
}
}
Форма ответа