Тема: Рекурсія на С++, вкладені пари дужок ([])

Допоможіть написати код для програми
Рядок може містити як круглі так і квадратні дужки. Кожній відкриваючій дужці відповідає закриваюча того ж типу (круглій – кругла, квадратній – квадратна). Напишіть рекурсивну функцію, яка перевіряє правильність розміщення дужок в цьому випадку.
Приклад неправильного розміщення: ( [ ) ].

2

Re: Рекурсія на С++, вкладені пари дужок ([])

Пункт правил 3.5 каже

Теми без будь-яких напрацювань будуть просто ігноруватись учасниками форуму, а модератори при першій можливості перенесуть їх в кошик для сміття.

Покажіть напрацювання. Якшо не маєте, тоді вам краще зробити тему в розділі Пропоную роботу

3

Re: Рекурсія на С++, вкладені пари дужок ([])

Тему закрито і перенесено в кошик.

4

Re: Рекурсія на С++, вкладені пари дужок ([])

Тему відкрито і перенесено в C/C++.
Мені було цікаво чи існує рішеня цієї задачі без явного користаня stack'а.

#include <iostream>

char const *skipValidSequence(char const *str) {
    if(!str) return nullptr;
    char c;
    while(c = *str) {
        if(c == ')' || c == ']') return str;
        if(c == '(' || c == '[') {
            char const *p = skipValidSequence(str + 1);
            if(!p || !*p) return str;
            if(*p == '(' || *p == '[') return p;
            if(
                c == '(' && *p == ')' ||
                c == '[' && *p == ']'
            ) str = p;
            else return str;
        }
        ++str;
    }
    return str;
}

using namespace std;

int main(int const argc, char const *const argv[]) {
    if(argc > 1) {
        for(int i = 1; i < argc; ++i) {
            char const *s = argv[i];
            cout << "\r\n" << s << "\r\n";
            char const *p = skipValidSequence(s);
            if(p && s <= p)
                if(*p) {
                    while(p != s) {
                        cout << ' ';
                        --p;
                    }
                    cout << '^' << "\r\n";
                    cout << "error.";
                }
                else cout << "ok.";
            else cout << "internal error.";
            cout << "\r\n";
        }
    }
    else {
        cout << "Input arguments. Example:\r\n"
            << (argc > 0 ? argv[0] : "program.exe")
            << " \"([][(()[])])\"\r\n";
    }
    return 0;
}
Подякували: Chemist-i, lucas-kane2