![]() |
|
Модераторы: bsa |
![]()
|
|
| maxnsk82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 27.6.2009 Репутация: нет Всего: нет |
В центре помощи мне так и не помогли, хочу обратится сюда, есть задание:
Разработать две функции, одна из которых вводит с клавиатуры набор данных в произвольной последовательности и размещает в памяти в переменном формате. Другая функция читает эти данные и выводит на экран. Программа запрашивает и размещает в памяти несколько наборов данных при помощи первой функции, а затем читает их и выводит на экран при помощи второй. Размещение данных производить в статическом массиве байтов фиксированной размерности с контролем его переполнения. Упакованная строка, содержащая символьное представление целых чисел. Все символы строки, кроме цифр, помещаются в последовательность в исходном виде. Последовательность цифр преобразуется в целую переменную, которая записывается в упакованную строку, предваренная символом \0. Конец строки - два подряд идущих символа \0. Пример: -исходная строка: "aa2456bbbb6665" -упакованная строка: 'a' 'a' '\0' 2456 'b' 'b' 'b' 'b' '\0' 6665 '\0' '\0' Я вообще не могу сообразить что да как В поисковиках на "упакованная строка" выдаёт статьи про архиваторы, или схожие задания, но решений так и не нашёл. Подскажите пожалуйста. А если есть схожий пример так вообще было бы здорово. |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 5 Всего: 10 |
maxnsk82, перебирай символы строки, если не цифра - копируй как есть,
если цифра - пиши '\0', делай strtol чтобы получить число, пиши число, и по-новой |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
maxnsk82, strspn() и strcspn() тебе в помощь.
|
|||
|
||||
| maxnsk82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 27.6.2009 Репутация: нет Всего: нет |
В общем понимаю как это сделать, но меня смущает "размещает в памяти в переменном формате" и "Размещение данных производить в статическом массиве байтов фиксированной размерности с контролем его переполнения."..т.е. может всё не так просто?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Статический массив: Type array[100]; - массив на 100 элементов типа Type.
Словосочетание "переменный формат" наверное подразумевает, что записи в массиве не должны иметь фиксированной длины. Другими словами, ты создаешь массив типа char на 2000 элементов, например. Затем перед каждой записью ты указываешь, сколько она занимает места. Твой пример работы можно представить будет так:
|
|||
|
||||
| maxnsk82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 27.6.2009 Репутация: нет Всего: нет |
Спасибо за наводку) Немного прояснилось как делать - буду пробовать, тему пока не буду закрывать - может ещё что спросить понадобиться..
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
насколько я помню, это подразумевает работу с памятью в "стиле элипсиса". |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
||||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 11 Всего: 88 |
Это сообщение отредактировал(а) Dov - 11.5.2010, 21:55 -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| maxnsk82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 27.6.2009 Репутация: нет Всего: нет |
Что-то похожее, но вот смущает "размещает в памяти в переменном формате". В этом коде получается первая функция запрашивает строку и в памяти хранится чисто символьная строка. А вторая функция так же посимвольно выводит её, если встречает цифры, то преобразует их в число num, и выводит....не уверен что это соответствует заданию....думаю может как-то можно завести массив указателей типа void - а потом уже определять на что указываем на символ или число, но пока как-то смутно понимаю эту идею, только что придумал)
|
|||
|
||||
| maxnsk82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 27.6.2009 Репутация: нет Всего: нет |
Про массив указателей плохая идея - в задании же ясно сказано "статический массив"...Такой вопрос: а можно как-то в массив символов, хранить число? unsigned char вроде как можно, но небольшие числа...
|
|||
|
||||
| maxnsk82 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 27.6.2009 Репутация: нет Всего: нет |
Спасибо Dov! Разобрался в твоём коде, я никогда просто такие функции как у тебя не использовал...всё работает как надо
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
вообще-то символ, это частный случай целого числа. Т.е. char это числа от -128 до +128. А вот int имеет гораздо больший диапазон. Поэтому нет никаких проблем хранить код символа в переменной типа int.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |