Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
goga0881
Зарегистрирован: 14.04.2005 Сообщения: 21
|
Добавлено: Вт Июл 19 2005 17:36 Заголовок сообщения: неогранниченный размер массива в С. Как это реализовать? |
|
|
Всем привет!
Программа, которая печатает самую длинную строку из всех введенных, но при этом заранее неизвестно длина строки, т.е. не существует ограничения на размер введеннй строки. Короче длина массива определяется после того, как в него прочитан некий поток символов, а точнее строка. Надеюсь постановка более ясна на этот раз. Оговорюсь, задача дана после того, как рассматривается ввод вывод getchar()-ом и putchar()-ом + понятие символьных массивов. Ни о каких malloc-ов и alloc-ов речь не идет.
Всем спасибо
Последний раз редактировалось: goga0881 (Чт Июл 21 2005 07:59), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Ср Июл 20 2005 10:24 Заголовок сообщения: |
|
|
Во-первых, массив неограниченного размера не бывает, он ограничен размером виртуальной памяти. Во-вторых, динамически менять размер массива можно, если он динамически выделен, с помощью функции realloc. В-третьих, вообще вопрос не совсем понятен... |
|
Вернуться к началу |
|
|
September
Зарегистрирован: 14.11.2004 Сообщения: 109 Откуда: Saint-Petersburg
|
Добавлено: Вт Июл 26 2005 11:31 Заголовок сообщения: Re: неогранниченный размер массива в С. Как это реализовать? |
|
|
Могу конечно путать, но неограниченный по размеру массив - это список, не так ли?
Классов в С нет, но есть указатели и структура.
Это если я правильно опнял вопрос, то копаем здесь.
Готов принять критику, т.к. могу быть не прав. |
|
Вернуться к началу |
|
|
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Вт Июл 26 2005 12:32 Заголовок сообщения: |
|
|
Да нет. Можно с помощью realloc изменять длину массива, правда при этом он может переместиться, поэтому старые ссылки на него стаунут недействительны... |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Вт Июл 26 2005 14:46 Заголовок сообщения: |
|
|
Kefir писал(а): | Во-первых, массив неограниченного размера не бывает, он ограничен размером виртуальной памяти. ... |
кхм...поправочка маленьчкая...
Вы апсолютно правы, если речь идёт о сях, и под форточками.
Но (!) НЕ правы, если речь идёт о фортране (например) и досе. В нём мона...
1) Выделить массив на рантайме. То бишь определить в процессе выполнения (ну сишников этим не напугать)...
2) Выделить ГОРАЗДО больше чем есть физической памяти (даже статически). (предвидя Ваши замечания про виртуал память продолжу) При этом программа скомпилирована ЧИССО под MSDOS и успешно под ним запускаеться и работает
удачи Вам
(круглый)
ЗЫ
Честно говоря - в низ фортран по данному поводу не копал - посему направление механики ХЗ. Возможно и свой аля свопинг. Экзешник может кстати быть больше оперативки...
==================
ЗЫ ЗЫ
приношу извинения...
там речь только о СЯХ шла... |
|
Вернуться к началу |
|
|
ihor
Зарегистрирован: 28.07.2005 Сообщения: 1
|
Добавлено: Чт Июл 28 2005 11:08 Заголовок сообщения: Re: неогранниченный размер массива в С. Как это реализовать? |
|
|
а зачем всё держать в памяти -- сбрасывйте строку в файл на диске, или более интеллектуально - заводим стат. массив, пишем туда строку, если не помещается, переключаемся на запись в файл. т.о. и получается, что-то вроде организации виртуальной памяти. |
|
Вернуться к началу |
|
|
Artur
Зарегистрирован: 18.01.2005 Сообщения: 13
|
Добавлено: Пт Июл 29 2005 22:18 Заголовок сообщения: |
|
|
Совершенно верно пишет September. Здесь однозначно нужен Объектно ориентированный список (ну в более сложном случае Хэш - Таблица) Во встроенной библиотеке STL уже есть готовая структура типа список написанная программистами Microsoft - List, но я бы рекомендовал написать свой список, и здесь как мне кажется подойдет лучше односторонний. Если это сделать то получиться максимально компактная и быстрая прога, которая будет по минимуму расходовать память.
Если интересно напиши и я разъясню если чего непонятно.
P.S. Вообще вопрос мне кажется неординарный ? =) |
|
Вернуться к началу |
|
|
Wladimir
Зарегистрирован: 02.03.2005 Сообщения: 150 Откуда: Ставропольский край
|
Добавлено: Сб Июл 30 2005 08:50 Заголовок сообщения: |
|
|
Почему бы просто не использовать std :: string или std :: vector. |
|
Вернуться к началу |
|
|
|