Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 01.12.2021
Сообщений: 78

Напишите рекурсивную функцию, проверяющую правильность размещение скобок в этом случае

21.02.2022, 20:04. Показов 899. Ответов 5

Студворк — интернет-сервис помощи студентам
Строка может содержать как круглые, так и квадратные скобки. Каждой открывающей
дужке соответствует закрывающая того же типа (круглой – круглая, квадратной –
квадратно). Напишите рекурсивную функцию, проверяющую правильность
размещение скобок в этом случае.
Пример неправильного размещения: ([ ]].
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2022, 20:04
Ответы с готовыми решениями:

Написать рекурсивную функцию, проверяющую правильность расстановки круглых скобок в строке
Написать рекурсивную функцию, проверяющую правильность расстановки круглых скобок в данной строке.

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

Напишите рекурсивную функцию, проверяющую правильность расстановки скобок
Добрый вечер, нужна помощь с рекурсивными функциями. В строке могут присутствовать скобки как круглые, так и квадратные скобки....

5
0 / 0 / 0
Регистрация: 01.12.2021
Сообщений: 78
22.02.2022, 23:07  [ТС]
Смог написать только такой код но он считает размещение ([)] правильным как его можна переделать а то никак не могу придумать
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
45
46
47
48
#include <iostream>
#include <string>
 
using namespace std;
 
bool braces_ok(string a, int idx, int square, int round, int braces){
    if(idx == a.size()) {
        if(square != 0 || round != 0 || braces != 0)
            return false;
        return true;
    }
    if(square < 0 || round < 0 || braces < 0)
        return false;
    else {
        switch(a[idx]) {
            case '(':
                return braces_ok(a, idx + 1, square, round + 1, braces);
                break;
            case ')':
                return braces_ok(a, idx + 1, square, round - 1, braces);
                break;
            case '[':
                return braces_ok(a, idx + 1, square + 1, round, braces);
                break;
            case ']':
                return braces_ok(a, idx + 1, square - 1, round, braces);
                break;
            case '{':
                return braces_ok(a, idx + 1, square, round, braces + 1);
                break;
            case '}':
                return braces_ok(a, idx + 1, square, round, braces - 1);
                break;
            default:
                return braces_ok(a, idx + 1, square, round, braces);
                break;
        }
    }
}
 
int main() {
    string a;
    while(1) {
        cout << "string a: ";
        cin >> a;
        cout << boolalpha << braces_ok(a,0,0,0,0) << endl;
    }
}
0
 Аватар для stzer
140 / 110 / 60
Регистрация: 26.10.2013
Сообщений: 314
23.02.2022, 02:48
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
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <string>
#include <stack>
 
char get_ending(char c)
{
    switch (c)
    {
        case '(': return ')';
        case '[': return ']';
        case '{': return '}';
    }
    return '\0';
}
 
bool braces_ok(const std::string &str, size_t idx, std::stack<char> &stack)
{
    if (idx == str.size())
    {
        return stack.empty();
    }
    
    const char c = str[idx];
    switch (c)
    {
        case '(':
        case '[':
        case '{':
        {
            stack.push(c);
            return braces_ok(str, idx + 1, stack);
        }
        case ')':
        case ']':
        case '}':
        {
            if (stack.empty() || get_ending(stack.top()) != c)
            {
                return false;
            }
            stack.pop();
            return braces_ok(str, idx + 1, stack);
        }
        default:
            // here we can skip non brackets or do other stuff
            return braces_ok(str, idx + 1, stack);
    }
}
 
int main() 
{
    std::string a;
    std::cin >> a;
    std::stack<char> stack;
    std::cout << std::boolalpha << braces_ok(a, 0, stack) << std::endl;
}
Логика примерно такая.
А как не тащить стек в аргументы функции - сам придумаешь.
0
0 / 0 / 0
Регистрация: 01.12.2021
Сообщений: 78
23.02.2022, 02:56  [ТС]
проблема в том что стеков вообще не должно быть
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.02.2022, 05:21
Код by Tydus из codewars :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <regex>
 
bool valid_braces(std::string braces); 
 
int main()
{
    std::string test = "([][()])";
    std::cout << std::boolalpha << valid_braces(test);
 
    return 0;
}
 
bool valid_braces(std::string braces) {
  std::string ret = std::regex_replace(braces, std::regex("\\(\\)|\\[\\]|\\{\\}"), "");
  if(ret == "") return true;
  if(ret == braces) return false;
  return valid_braces(ret);
}
Добавлено через 2 минуты
Beeblgo, а вообще, где это вас таким мазохизмом заставляют заниматься ?
0
0 / 0 / 0
Регистрация: 01.12.2021
Сообщений: 78
23.02.2022, 12:24  [ТС]
лучше тебе не знать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.02.2022, 12:24
Помогаю со студенческими работами здесь

Напишите рекурсивную функцию, проверяющую правильность расстановки скобок в строке
Напишите рекурсивную функцию, проверяющую правильность расстановки скобок в строке. В строке могут присутствовать как &quot;(&quot;,...

Написать рекурсивную функцию, проверяющую правильность расстановки скобок в строке
Помогите,пожалуйста! Написать рекурсивную функцию, проверяющую правильность расстановки скобок в строке.При правильной расстановке...

Написать функцию, проверяющую правильность расстановки скобок в выражении.
Написать функцию, которая проверяет правильная последовательность скобок на входе. Виды скобок () {} &lt;&gt;. Другой вариант:...

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

Дан массив строк. Напишите программу, проверяющую правильность вложения операторных скобок begin . end — каждому begin должен соответствовать end
Дан массив строк, представляющий собой фрагмент программы на языке Pascal. Напишите программу, проверяющую правильность вложения...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru