Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2010, 09:44   #1
yardie
 
Регистрация: 30.08.2010
Сообщений: 7
По умолчанию парсер массива

Задание было такое:
написать парсер массива чисел, на входе: строка вида "число|число|число|число" и кол-во чисел. число - целое, на выходе: массив из чисел
прим: strtok и аналоги не использовать, atoi можно, STL не использовать

вот я такое написал

Код:
#include <stdio.h>
#include <stdlib.h>
 
#define BUFFSIZE 80
#define MAXNUMCNT 20
 
int* getNumbers(char*, int*, size_t, size_t*);
 
int main()
{
        char buf[BUFFSIZE + 1];
        int  nums[MAXNUMCNT];
        size_t cnt;
        puts("Введите строку чисел");
        fgets(buf, BUFFSIZE, stdin);
        getNumbers(buf, nums, MAXNUMCNT, &cnt);
        for(size_t i = 0; i < cnt; ++i)
                printf("nums[%02u] = %d\n", i + 1, nums[i]); 
        return 0;
}
 
/* Функция будет разбирать строку str и разбивать ее на числа
 * которые будут храниться в массиве numbers, но не больше, чем
 * size чисел. Если указатель cnt не указывает на NULL, то в нем
 * возвращается количество распарсенных чисел
 * Строка разрушается
 */ 
int* getNumbers(char* str, int* numbers, size_t size, size_t* cnt)
{
        size_t n = 0;
        char *p = str;
        char *q = str;
        
        while(*q && (n <= size))
        {
          if(*q == '|')
                {
                        *q++ = '\0';
                        numbers[n++] = atoi(p);
                        p = q;
                }
                else
                        ++q;
        }
        if(n < size)
                numbers[n++] = atoi(p);
        
        if(cnt)
                *cnt = n;
                
        return numbers;
}


Как можно упростить до минимума код в рамках задания?
yardie вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
парсер на C# newerwiner C# (си шарп) 1 08.05.2011 16:16
Прога парсер Unycom Фриланс 10 26.09.2010 18:11
Универсальный парсер gamer123 Общие вопросы Delphi 20 10.08.2010 09:23
Парсер страницы Clif Фриланс 6 20.05.2010 10:23
Парсер Ronin333 Общие вопросы C/C++ 3 15.04.2010 14:00