Использование malloc для рекурсивной функции, которая получает разный объем памяти каждый раз, когда вызывается функция - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь реализовать функцию

int array(char *str, int length) 

, который вызывает массив символов и копирует только определенные элементы в другой массив, который должен иметь ту же длину, что и исходный массив str.

Но эта функция должна быть рекурсивной, и я не вижу способа объявить этот «скопированный» массив,

так как если я сделаю

char copied(length); 

внутри функции,

поскольку функция вызывает себя рекурсивно, массив будет сбрасываться при каждом запуске.

Я ограничен в создании другой функции, которая принимает длину в качестве своих переменных, так что это не выход.


struct variables {
    int counter;
    char bra[500];
    int maxb;
    int findtheking[500];
    int numoright;
};

struct variables mat = { 0, '\0', 0 , 0, 0 };

int matches(char* str, int len) {
    if (mat.counter >= strlen(str)) {
        if (mat.bra[strlen(str)-1] == '(') {
            mat.counter = 0;
            mat.bra[0] = '\0';
            return 0;
        }
        else if (mat.bra[strlen(str)-1]  == '0') {
            mat.counter = 0;
            mat.bra[0] = '\0';
            return 1;
        }


    }
    else {
        if (str[mat.counter] == '(') {
            mat.bra[len-1] = str[mat.counter];
            mat.counter++;
            matches(str, len - 1);

        }
        else if (str[mat.counter] == ')') {
            if (mat.bra[len] == '(') {
                mat.counter++;
                mat.bra[len] = '0';
                matches(str, len + 1);
            }
            else {
                mat.counter = 0;
                mat.bra[0] = '\0';
                return 0;
            }
        }
        else {
            mat.counter++;
            matches(str, len);
        }
    }
}

Это функция, которую я сделал для моего CS HW, уже сделано и отправлено.

Он принимает строку символов и проверяет скобки, если они совпадают.

Этот код находится в func.c и берет str из main.c.

  • Я могу использовать только рекурсивный способ, без циклов for / while.

Чтобы решить эту проблему, я сделал эту функцию, чтобы найти скобки в строке, и, если '(' найден, функция помещает его в массив с именем mat.bra, который я установил его размер 500, потому что я не мог найти способ сделать mat.bra размером 'len'.

Этот код не будет работать для строк свыше 500 элементов, поэтому мне было интересно, есть ли способ сделать размер mat.bra 'len', чтобы не беспокоиться об общем количестве символов в строке.

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