Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разнотипные переменные, динамич. и стат. способы создания 
V
    Опции темы
maxnsk82
Дата 7.5.2010, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 27.6.2009

Репутация: нет
Всего: нет



В центре помощи мне так и не помогли, хочу обратится сюда, есть задание:

Разработать две функции, одна из которых вводит с клавиатуры набор данных в произвольной последовательности и размещает в памяти в переменном формате. Другая функция читает  эти  данные  и выводит на экран. Программа запрашивает и размещает в памяти несколько наборов данных при помощи первой функции, а затем читает их и выводит на экран при помощи второй. Размещение данных производить в статическом массиве байтов фиксированной размерности  с  контролем  его переполнения.

Упакованная строка, содержащая символьное представление целых чисел. Все символы строки, кроме цифр, помещаются в последовательность в исходном виде. Последовательность цифр преобразуется в целую переменную, которая записывается в упакованную строку, предваренная символом \0. Конец строки - два подряд идущих символа \0. Пример:
    -исходная строка: "aa2456bbbb6665"
    -упакованная строка: 'a' 'a' '\0' 2456 'b' 'b' 'b' 'b' '\0' 6665 '\0' '\0'

Я вообще не могу сообразить что да как smile , с чего начинать, что такое упакованная строка smile 
В поисковиках на "упакованная строка" выдаёт статьи про архиваторы, или схожие задания, но решений так и не нашёл. Подскажите пожалуйста. А если есть схожий пример так вообще было бы здорово.

PM MAIL   Вверх
Abyx
Дата 7.5.2010, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



maxnsk82, перебирай символы строки, если не цифра - копируй как есть,
если цифра - пиши '\0', делай strtol чтобы получить число, пиши число, и по-новой
PM MAIL   Вверх
bsa
Дата 7.5.2010, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



maxnsk82, strspn() и strcspn() тебе в помощь.

PM   Вверх
maxnsk82
Дата 10.5.2010, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 27.6.2009

Репутация: нет
Всего: нет



В общем понимаю как это сделать, но меня смущает "размещает в памяти в переменном формате" и "Размещение данных производить в статическом массиве байтов фиксированной размерности  с  контролем  его переполнения."..т.е. может всё не так просто?
PM MAIL   Вверх
bsa
Дата 10.5.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Статический массив: Type array[100]; - массив на 100 элементов типа Type.
Словосочетание "переменный формат" наверное подразумевает, что записи в массиве не должны иметь фиксированной длины. Другими словами, ты создаешь массив типа char на 2000 элементов, например. Затем перед каждой записью ты указываешь, сколько она занимает места. Твой пример работы можно представить будет так:
Код
{
   1, 'a',
   1, 'a',
   1, '\0',
   4, '2', '4', '5', '6',
   1, 'b',
   1, 'b',
   1, 'b',
   1, 'b',
   1, '\0',
   4, '6', '6', '6', '5',
   1, '\0',
   1, '\0'
}
При выводе смотришь, сколько символов в записи, если один, то выводишь в апострофах, в противном случае без.
PM   Вверх
maxnsk82
Дата 11.5.2010, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 27.6.2009

Репутация: нет
Всего: нет



Спасибо за наводку) Немного прояснилось как делать - буду пробовать, тему пока не буду закрывать - может ещё что спросить понадобиться..
PM MAIL   Вверх
mes
Дата 11.5.2010, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(bsa @  10.5.2010,  15:24 Найти цитируемый пост)
Словосочетание "переменный формат" наверное подразумевает

насколько я помню, это подразумевает работу с памятью в "стиле элипсиса".


--------------------
PM MAIL WWW   Вверх
bsa
Дата 11.5.2010, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(mes @  11.5.2010,  10:05 Найти цитируемый пост)
насколько я помню, это подразумевает работу с памятью в "стиле элипсиса".

Не думаю, что это относится к словосочетанию: "размещает в памяти в переменном формате".  smile 
PM   Вверх
Dov
Дата 11.5.2010, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Код
#define LEN 81

void getData(char * str)
{
    printf("Введите последовательность(не более %d) буквенно-числовых символов:\n", LEN - 1);
    fgets(str, LEN, stdin);
}

void strPack(char * str)
{
    char   packstr[256] = "";
    int    num = 0;

    while(1)
    {
        if(isalpha(*str))
        {
            num = 0;
            sprintf(packstr + strlen(packstr), "'%c'", *str);         
        }
        else if(isdigit(*str))
        {
            while(isdigit(*str))
            {
                num *= 10;
                num += *str++ - '0';
            }
            sprintf(packstr + strlen(packstr), "'\\0'%d", num);
            str--;
        }

        if(!*str++)
        {            
            sprintf(packstr + strlen(packstr), "'\\0''\\0'");
            break;
        }
    }

    puts(packstr);
}

int main()
{
    char srcstr[LEN];

    getData(srcstr);
    strPack(srcstr);

    return 0;
}


Это сообщение отредактировал(а) Dov - 11.5.2010, 21:55


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
maxnsk82
Дата 6.6.2010, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 27.6.2009

Репутация: нет
Всего: нет



Что-то похожее, но вот смущает "размещает в памяти в переменном формате". В этом коде получается первая функция запрашивает строку и в памяти хранится чисто символьная строка. А вторая функция так же посимвольно выводит её, если встречает цифры, то преобразует их в число num, и выводит....не уверен что это соответствует заданию....думаю может как-то можно завести массив указателей типа void - а потом уже определять на что указываем на символ или число, но пока как-то смутно понимаю эту идею, только что придумал)
PM MAIL   Вверх
maxnsk82
Дата 6.6.2010, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 27.6.2009

Репутация: нет
Всего: нет



Про массив указателей плохая идея - в задании же ясно сказано "статический массив"...Такой вопрос: а можно как-то в массив символов, хранить число? unsigned char вроде как можно, но небольшие числа...
PM MAIL   Вверх
maxnsk82
Дата 6.6.2010, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 27.6.2009

Репутация: нет
Всего: нет



Спасибо Dov! Разобрался в твоём коде, я никогда просто такие функции как у тебя не использовал...всё работает как надоsmile
PM MAIL   Вверх
bsa
Дата 6.6.2010, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(maxnsk82 @  6.6.2010,  09:35 Найти цитируемый пост)
unsigned char вроде как можно, но небольшие числа...
вообще-то символ, это частный случай целого числа. Т.е. char это числа от -128 до +128. А вот int имеет гораздо больший диапазон. Поэтому нет никаких проблем хранить код символа в переменной типа int.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0588 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.