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

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

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

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

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

Помогите люди добрые!!Со строками вообще проблема...не знаю как!!Помогите пожалуйста!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.03.2011, 19:14
Ответы с готовыми решениями:

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

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

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

42
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
10.03.2011, 19:46
еасли я правильно понял задание то:
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
 Аватар для igorrr37
2869 / 2016 / 991
Регистрация: 21.12.2010
Сообщений: 3,724
Записей в блоге: 15
10.03.2011, 20:10
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
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
10.03.2011, 20:13
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
а вот такая комбинация считается "сбалансированной"?
")("
1
10.03.2011, 21:08

Не по теме:

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

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

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

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

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

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

выходит анализируем строку....но в задание именно текст
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
10.03.2011, 22:29
Цитата Сообщение от ValeryS Посмотреть сообщение
после каждого действия проверять переменную
если отрицательно тут же выходить закрывающих больше чем открывающих = непорядок
т.е если у тебя первая (
перем =1
потом )
перем=0
продолжаем проверку
другая ситуация
)
перем=-1
тут же выходим явный дисбаланс
1
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
10.03.2011, 22:32  [ТС]
ValeryS, ага действительно,все ясно,логично..)
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
10.03.2011, 22:34
Цитата Сообщение от barlog Посмотреть сообщение
отя из примечания -Вводим строку, анализируем её и на её место вводим новую строку.
выходит анализируем строку....но в задание именно текст
вот это я и спрашивал!
если ( на первой стороке
а ) на 20
это сбалансированный текст или нет?
1
2 / 2 / 1
Регистрация: 03.11.2009
Сообщений: 227
10.03.2011, 22:43  [ТС]
ValeryS, по идеи да,да сбалансированный
0
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
10.03.2011, 22:44
barlog,ну можно и без static
1
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
10.03.2011, 22:57
Пробуй эту
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
если я все правильно понял,то надо обработать 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  [ТС]
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
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
17.03.2011, 20:45
barlog, Я же написал, смотри выше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2011, 20:45
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru