Страница 2 из 2

Re: Проблема с одномерным массивом.

Добавлено: 11 ноя 2009, 12:23
Dragon
Я до указателей пока еще не добрался, но они уже рядом. После изучения переделывать буду, как пить дать.
Albor писал(а):Четвёртое, в твоей программе есть большой недостаток, заключающийся в том, что уменьшить размер исходного массива нельзя, размер его фиксированный и где его конец после обработки неизвестно, а поскольку ты в массиве хранишь символы, то не лучше ли обратить взор на С-строки, то есть на массив, заканчивающийся символом '\0'.
Ну не совсем фиксированный.
Есть константа, определящая размер массива (const in ARRAY_SIZE=1;) .
Есть функция, которая заполняет этот массив (причем можно частично заполнить, за этот размер отвечает переменная size в функции удаления повторов): void fill(char a[], int size, int& used).
Посему конец массива после обработки хранится все в переменной size функции del. Насколько я знаю, то при объявлении массива в памяти резервируется место под указанное кол-во элементов, но передается только адрес 1 элемента (a[0]).

Re: Проблема с одномерным массивом.

Добавлено: 11 ноя 2009, 12:43
Albor
На счёт назначения переменной size понял, но из приведенного кода это не совсем очевидно. А теперь подумай над вопросом, если при заполнении массива будет добавлен символ ' ' (ты используешь пробел для "затирки", насколько я понял), ведь это реальный символ, такой же как 'a' и 'b', как отработает твоя функция? Она переместит его в конец массива и уменьшит размер на 1. Этого ли ты ожидаешь?

Re: Проблема с одномерным массивом.

Добавлено: 11 ноя 2009, 13:10
Dragon
Albor писал(а):На счёт назначения переменной size понял, но из приведенного кода это не совсем очевидно. А теперь подумай над вопросом, если при заполнении массива будет добавлен символ ' ' (ты используешь пробел для "затирки", насколько я понял), ведь это реальный символ, такой же как 'a' и 'b', как отработает твоя функция? Она переместит его в конец массива и уменьшит размер на 1. Этого ли ты ожидаешь?
Понял о чем речь. У меня функция, которая заполняет массив, пробел не считает. Т.е. пробел можно насильно присвоить, при объявлении массива. Тогда выявится недоработка. Выходит, что маркировка элементов на "убой" не лучший вариант.

Re: Проблема с одномерным массивом.

Добавлено: 11 ноя 2009, 13:28
Albor
Dragon писал(а):Выходит, что маркировка элементов на "убой" не лучший вариант.
Всё верно, маркировать чем-либо не очень хорошо. Завтра, например, дадут задание сделать то же самое, но с массивом целых чисел, чем маркировать в таком случае? Напиши копирование диапазона, как я предлагал выше. То есть логика такая: Берём элемент с индексом 1 и сравниваем с 0-м, не совпадают - переходим к индексу 2 и сравниваем с 0-м и 1-м, а если совпадают, то копируем со смещением: 2й в 1й, 3й во 2й и т.д. в конце --size.

Re: Проблема с одномерным массивом.

Добавлено: 11 ноя 2009, 13:41
Dragon
Albor писал(а):Всё верно, маркировать чем-либо не очень хорошо. Завтра, например, дадут задание сделать то же самое, но с массивом целых чисел, чем маркировать в таком случае? Напиши копирование диапазона, как я предлагал выше. То есть логика такая: Берём элемент с индексом 1 и сравниваем с 0-м, не совпадают - переходим к индексу 2 и сравниваем с 0-м и 1-м, а если совпадают, то копируем со смещением: 2й в 1й, 3й во 2й и т.д. в конце --size.
Спасибо. Идею понял. Проработаю.

Re: Проблема с одномерным массивом.

Добавлено: 12 ноя 2009, 07:02
atavin-ta
Маркировать можно в любом случае. Для этого создаём ещё один массив с белевым базовым типом и маркируем там. Но маркировать всё-равно плохо. Лучше удалять сразу.