Официальный сайт студ.городка НГТУ
Программирование и БД » Срочно Help! (с++) 

#1  28.02.06 16:10

Срочно Help! (с++)

помогите решить задачу:

Задана строка. Проверить удовлетворяет ли ее структура следующему определению:

<текст>=<элемент>|<элемент><текст>
<элемент>=a|b|..|z|(<текст>)|[<текст>]|{<текст>}

короче проверить баланс скобок

Offline

#2  28.02.06 20:09

Re: Срочно Help! (с++)

Из задания ниче не понял.
Вот баланс скобок:

Код: cpp:

int count = 0;
for(int i =0;i< strlen(str);i++){
if (str[i]=='(' ) count++;
if (str[i]==')' ) count--;
}

Если надо для разных скобок ((),[],{}),то case в цикле и отдельный счетчик для   каждого вида.

Offline

#3  28.02.06 23:24

Re: Срочно Help! (с++)

Код: cpp:

int count = 0;
for(int i =0;i< strlen(str)&&count>=0;i++){
if (str[i]=='(' ) count++;
if (str[i]==')' ) count--;
}
if(i-strlen(str)) horosho;

Offline

#4  01.03.06 14:22

Re: Срочно Help! (с++)

А если строка вида "abc(de)fg(h)"?
Твой цикл не выполнится ни разу.
-//-
if(!count) horosho;

Offline

#5  01.03.06 14:35

Re: Срочно Help! (с++)

цикл выполниться на этой строке "abc(de)fg(h)"
в последнем условии надо ещё прописать каунт==0
иф вне цикла

твой пример завалиться на вот этом ())(
неверное расположение скобок

Offline

#6  01.03.06 17:39

Re: Срочно Help! (с++)

да просто счтайте отдельно открывающие и закрывающие. если звкрывающих стало больше, то неверная расстановка...

Offline

#7  01.03.06 18:26

Re: Срочно Help! (с++)

Raptor написал(а):

да просто счтайте отдельно открывающие и закрывающие. если звкрывающих стало больше, то неверная расстановка...

что и делает мой алгоритм приведенный выше, тока компактней и чуть похитрее

Offline

#8  04.03.06 11:17

Re: Срочно Help! (с++)

А если: ( { [ } ] ) ?
Такой расклад по уловию не подходит, а по предложеным решениям - влет.
Думаю, лучше так:
int isStrBalanced(char * str)
  for(char *c = str; *c != 0; c++){
    if(*c == '(' || *c == '{' || *c == '[') stack.push(*c);
    else if(*c == ')' && stack.pop() != '(') return 0;
    else if(*c == '}' && stack.pop() != '{') return 0;
    else if(*c == ']' && stack.pop() != '[') return 0;
  }
  if(stack.empty)return 1;
  else return 0;
}

Offline

#9  04.03.06 16:21

Re: Срочно Help! (с++)

красиво
надо будет запомнить

Offline

Программирование и БД » Срочно Help! (с++) 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.835 сек.
Выполнено 14 запросов.