C проверить, существует ли пространство в массиве, если не перераспределить больше места? - PullRequest
0 голосов
/ 04 ноября 2019

Я должен написать программу, которая принимает строковый аргумент, такой как «abcd», и возвращает новую строку, например «a-bb-ccc-dddd». поэтому для каждого символа в строке увеличивайте его повторение в новой строке.

В чем-то вроде C # или Java я бы просто использовал StringBuilder, но в C я не уверен, как проверить, достаточно ли в строке места для нового символа. если нет, перераспределите.

       char *str = malloc(strlen(source) * sizeof(char));
       for (int i = 0; i <= strlen(source) - 1; i++)
               (for int j = 0; j < i + 1; j++)
                 if (space_exists_in_string(source))
                     str[j] = source[i]; 
                 else {
                    str = realloc(str, strlen(str) * 2);
                    str[j] = source[i]
                 }

Так что в основном я ищу способ проверить, если (space_exists_in_string).

Спасибо

1 Ответ

0 голосов
/ 04 ноября 2019

Если массив объявлен как символьный массив, например char arr[], вы можете вызвать sizeof(arr), и вы получите размер массива. Но, если ему выделена какая-то куча памяти с помощью malloc или calloc, вы не можете получить размер массива, кроме вызова strlen(), который дает только размер строки, а не место в памяти. Итак, либо объявите вашу строку как массив символов, либо сохраните размер созданной памяти (при динамическом создании) и обновляйте ее каждый раз, когда вы расширяете / уменьшаете свою память.

В вашем случае, я думаю, что это будетбудьте просты, если вы выделите какое-то хранилище для вашего вывода, итерируете ввод и вставляете данные в вывод. Таким образом, вы знаете, сколько данных выделить для вывода, и вам не нужно расширять их. Требуемое место для вашего вывода будет (1 + 2 + 3 + 4 + 5 +... strlen(input) times) + (strlen(input)-1)

...