Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/67: Рейтинг темы: голосов - 67, средняя оценка - 4.72
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
1

Баланс круглых скобок

10.03.2011, 19:14. Показов 12065. Ответов 42
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проверить, соблюдается ли в тексте баланс круглых скобок. Для каждой открывающей скобки ‘(‘ должна быть найдена соответствующая закрывающая ‘)’.

Примечание-Обрабатываемый в программе текст должен содержать несколько строк. Но массив строк не формировать, то есть в оперативной памяти хранить одну обрабатываемую строку. Оперативную память резервируем для одной строки. Вводим строку, анализируем её и на её место вводим новую строку.

Помогите люди добрые!!Со строками вообще проблема...не знаю как!!Помогите пожалуйста!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2011, 19:14
Ответы с готовыми решениями:

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

Вывести все корректные комбинации пар круглых скобок, которые можно сформировать из n скобок
Вывести все корректные комбинации пар круглых скобок, которые можно сформировать из n скобок,...

Проверить правильность расположения круглых скобок
Пусть задано множество строк. Проверить правильность расположения круглых скобок. Если скобки...

Перегрузка круглых скобок как ravalue
Не могу понять, как перегрузить () для того чтобы можно было использовать a(1, 2)=2; вместо a=3; ...

42
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
10.03.2011, 19:46 2
еасли я правильно понял задание то:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
#include<string>
using namespace std;
void analize();
static int c=1;
int main() {
    analize();
    analize();
    cin.get();
    return 0;
}
void analize() {
    string str;
     cout<<"Vvedi stroky "<<c<<":";
     short otkr=0,zakr=0;
    getline(cin,str);
    for(int i=0;i<str.size();i++) {
        if(str[i]=='(')
        otkr++;
        else if(str[i]==')')
        zakr++;
    }
    if(otkr==zakr)
    cout<<"est balans";
    else
    cout<<"net balansa";
    cout<<endl;
    c++;
}
1
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
10.03.2011, 20:10 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<algorithm>
 
int main() {
    std::string s;
    int i, dif=0;
    std::cout<<"Kolichestvo strok= ";
    (std::cin>>i).ignore();
    for(; i>0; i--){
        std::cout<<"Input string\n";
        getline(std::cin, s);
        dif+=std::count(s.begin(), s.end(), '(')-std::count(s.begin(), s.end(), ')');
    }
    std::cout<<std::boolalpha<<!dif<<"\n";
}
2
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
10.03.2011, 20:13 4
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
#include <algorithm>
 
int main(){
  std::string str;
  while( getline(std::cin, str) )
    std::cout << ( std::count(str.begin(), str.end(), '(') == std::count(str.begin(), str.end(), ')')? "YES" : "NO" ) << '\n';
  return 0;
}
1
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
10.03.2011, 21:06 5
а вот такая комбинация считается "сбалансированной"?
")("
1
Kastaneda
10.03.2011, 21:08
  #6

Не по теме:

igorrr37, я такого еще не видел)

C++
1
(std::cin>>i).ignore();

1
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
10.03.2011, 21:24  [ТС] 7
no0ker, нет такая комбинация ")(" не подходит
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
10.03.2011, 21:26 8
barlog, Тогда ни один вышенаписаной код не катит
1
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
10.03.2011, 21:36  [ТС] 9
lavan, static int c=1;
а зачем это?

Добавлено через 3 минуты
в задании же сказано на каждую открывающуюся "(".......а ")(" - здесь сначала закрывающая...впрочем как в обычном тесте....(..)...((......))....(..)
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
10.03.2011, 21:44 10
может сделать так
переменная =0
если скобка ( +1
если ) -1
после каждого действия проверять переменную
если отрицательно тут же выходить закрывающих больше чем открывающих = непорядок
дошли до конца текста если 0 есть баланс
любое число(положительное отрицательное отработали ранее) нет баланса

Добавлено через 3 минуты
кстати из задания непонятно баланс во всем тексте или в каждой строке??
1
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
10.03.2011, 22:28  [ТС] 11
ValeryS, а чем этот алгоритм лучше предыдущих?опть таки , если у нас будет ")(" то в итоге будет 0, а баланса нет.
в задание написано - Проверить, соблюдается ли в тексте баланс круглых скобок.

Добавлено через 3 минуты
хотя из примечания -Вводим строку, анализируем её и на её место вводим новую строку.

выходит анализируем строку....но в задание именно текст
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
10.03.2011, 22:29 12
Цитата Сообщение от ValeryS Посмотреть сообщение
после каждого действия проверять переменную
если отрицательно тут же выходить закрывающих больше чем открывающих = непорядок
т.е если у тебя первая (
перем =1
потом )
перем=0
продолжаем проверку
другая ситуация
)
перем=-1
тут же выходим явный дисбаланс
1
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
10.03.2011, 22:32  [ТС] 13
ValeryS, ага действительно,все ясно,логично..)
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
10.03.2011, 22:34 14
Цитата Сообщение от barlog Посмотреть сообщение
отя из примечания -Вводим строку, анализируем её и на её место вводим новую строку.
выходит анализируем строку....но в задание именно текст
вот это я и спрашивал!
если ( на первой стороке
а ) на 20
это сбалансированный текст или нет?
1
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
10.03.2011, 22:43  [ТС] 15
ValeryS, по идеи да,да сбалансированный
0
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
10.03.2011, 22:44 16
barlog,ну можно и без static
1
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
10.03.2011, 22:57 17
Пробуй эту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string>
#include <algorithm>
 
int get_idx_close_bracket(std::string &str, int x0){
  for(int i = x0 + 1; i < str.length(); ++i){
    if(str[i] == ')')
      return i;
  }
  return -1;
}
 
int main(){
  std::string str;
  while( getline(std::cin, str) ){
    size_t cnt = 0, _cnt = 0;
    _cnt = std::count(str.begin(), str.end(), '(') + std::count(str.begin(), str.end(), ')');
    while( get_idx_close_bracket(str, str.find_last_of('(')) != -1 && str.find_last_of('(') != std::string::npos ){
      cnt += 2;
      str.erase(str.find_last_of('('), 1);
      str.erase(get_idx_close_bracket(str, str.find_last_of('(')), 1);
    }
    std::cout << ( _cnt == cnt? "YES" : "NO" ) << '\n';
  }
  return 0;
}
1
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
10.03.2011, 23:07 18
если я все правильно понял,то надо обработать 2 строки и ввод с клавиатуры.
а чтобы избежать )( можно что то типа этого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for(int i=0;i<str.size();i++) {
                if(str[i]=='(')
                otkr++;
                else if(str[i]==')')
                zakr++;
                if(zakr>otkr) {
                 bz++;
                 break;
                }
        }
        if(otkr==zakr &&bz==0)
        cout<<"est balans";
        else if(bz>0)
         cout<<"net balansa";
        else if(otkr!=zakr)
        cout<<"net balansa";
        cout<<endl;
        c++;
1
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
17.03.2011, 20:41  [ТС] 19
lavan, а не могли бы вы пояснить суть вашего алгоритма,пожалуйста.не очень ясно за что отвечает bz...и как это спасает от случая )(?

Добавлено через 1 час 33 минуты
использую выше предложенный алгоритм -
первая (
перем =1
потом )
перем=0
продолжаем проверку
другая ситуация
)
перем=-1
тут же выходим явный дисбаланс


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include<conio.h>
#include<iostream.h>
#include<string.h>
//---------------------------------------------------------------------------
 
#pragma argsused
 
using namespace std;
void analize();
int c=1;
int main() {
        analize();
        analize();
        cin.get();
        return 0;
}
void analize() {
        string str;
         cout<<"Vvedistroky "<<c<<":";
    int kontrol=0;
        getline(cin,str);
        for(int i=0;i<str.size();i++)
         {
                if(str[i]=='(')
                kontrol++;
                else if(str[i]==')')
               {kontrol--;
                 if(kontrol<0)
                  cout<<endl<<"net balansa" ;
 
                }
         break;
        }
        if(kontrol==0)
        cout<<"est balans";
        else
        cout<<"net balansa";
        cout<<endl;
        c++;
}
Добавлено через 27 секунд
И ПОЧЕМУ ОН НЕПРАВИЛЬНО РАБОТАЕТ!!!НЕ РЕАГИРУЕТ НА )(!!!

Добавлено через 1 минуту
Помогите исправить пожалуйста!!!..эта задача уже достала...все понятно...но почему не так работает!!!(((
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
17.03.2011, 20:45 20
barlog, Я же написал, смотри выше.
0
17.03.2011, 20:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2011, 20:45
Помогаю со студенческими работами здесь

Баланс скобок
Помогите пожалуйста!!! Собственно задание: Текст в файле содержит многократно вложенные круглые...

Баланс скобок
проверить правильность расстановки скобок, используя контейнерные типы(стек)

Баланс скобок
Люди может укажите мне на ошибку в программе по которой не находит баланс..? #include&lt;iostream.h&gt;...

Баланс скобок
Доброе утро, мне было задано написать программу о том, соответствует ли каждой открывающей скобке,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru