@parkito

Как организовать динамический символьный массив в с++?

Здравствуйте, помогите пожалуйста разобраться со следующим вопросом.
Мне нужно чтобы все символы из фала или введенные пользователем поместились в массив. Я думаю, что для этого нужно использовать динамический массив. Но каким образом придумать не могу. Как - то нужно сосчитать количество символов --> выделить память --> инициализировать массив. В голову приходит
#include<iostream>
#include<cstdlib>
 
int main()
{
    char *arr;
    int size;
    setlocale(LC_ALL, "Russian");
    std::cout<<"Введите размер массива :"<<std::endl;
    std::cin>>size;
    arr = new char[size];
    std::cout<<"Заполните массив :"<<std::endl;
    for (int i = 0; i < size; i++)
        std::cin>>arr[i];
    std::cout<<std::endl;
    for (int i = 0; i < size; i++)
        std::cout<<" "<<arr[i];
    delete [] arr;
}

Но количество элементов может быть сверх большим или малым.
  • Вопрос задан
  • 8411 просмотров
Пригласить эксперта
Ответы на вопрос 3
barmaley_exe
@barmaley_exe
В общем случае нельзя предугадать, сколько элементов будет в массиве (можно оценить это значение сверху, но может быть крайне неэкономно), поэтому используется концепция расширяющихся массивов: имеется предвыделенный массив заданного размера, который заполняется по мере работы программы. Как только массив заполнен и места больше нет, а нужно вставить ешё один элемент, создается новый массив большей ёмкости, туда копируется содержимое старого, а элемент вставляется в новый массив. Старый после этого удаляется.

Так реализован std::vector, например.
Ответ написан
Комментировать
@Espleth
Можете использовать, как написали выше, векторы.
Выглядит это так:
#include <vector> //понадобится include
vector<char> arr; //объявляем его. длину вводить не обязательно
char c;
cin >> c;
arr.push_back(c); //вводим элементы
int length = arr.size(); //количество символов

Дальше работаем как с обычным массивом.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
в контексте задачи списки выглядят уместнее... (обычные такие списки на указателях). Либо realloc.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
.White Code Санкт-Петербург
от 250 000 ₽
Conjointly Бангкок
от 1 000 до 3 000 $
Conjointly Бангкок
от 1 000 до 2 000 $