Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Что означает каждая строка?

88K
02 октября 2014 года
privod
3 / / 29.09.2014
Помогите плиз. Закомментируйте каждую строку, что из них каждая означает? Чтоб я, чайник, понял)))
Код:
class List
{
    private:
        char** arr;
    public:
        List(){ next = prev = NULL; }
        ~List(){};
        void set(char** Arr){ arr = Arr; }
        char** get(){ return arr; }
        List* next;
        List* prev;
}*head,*tail;

void Add(char** Arr);
void out();

int main()
{
    FILE* myfile = NULL;
    errno_t err = fopen_s(&myfile, "file.cvs", "r");
    char line[100];
    char seps[] = " ,tn";
    char *token = NULL;
    char *next_token = NULL;  
    char** arr = NULL;
    if (!err)
    {
        while (!feof(myfile))
        {
            fgets(line, 100, myfile);
            token = strtok_s(line, seps, &next_token);        
            arr = new char*[3];
            int idx = 0;
            while ((token != NULL))
            {              
                if (token != NULL)
                {
                    arr[idx] = new char[100];
                    strcpy_s(arr[idx], strlen(token) + 1, token);                          
                    //printf(" %sn", token);
                    token = strtok_s(NULL, seps, &next_token);
                    idx++;                
                }
            }
           
            Add(arr);
        }
        out();    
    }
    fclose(myfile);
   

   
    cout << endl;
    system("pause");
    return 0;
}

void Add(char** Arr)
{
    List* ptr = NULL, *tmp = NULL;
    if (head == NULL)
    {
        ptr = new List();
        ptr->set(Arr);
        ptr->next = ptr->prev = NULL;
        head = tail = ptr;
    }
    else
    {
        tmp = tail;
        ptr = new List();
        ptr->set(Arr);
        tmp->next = ptr;
        ptr->prev = tmp;
        tail = ptr;
        ptr->next = NULL;
    }
}

void out()
{
    List* ptr = NULL;
    for (int idx = 0; idx < 3; idx++)
    {
        ptr = head;
        while (ptr != NULL)
        {
            cout << ptr->get()[idx] << " ";
            ptr = ptr->next;
        }      
        cout << endl;  
   
    }
}
392
02 октября 2014 года
cronya
421 / / 03.01.2009
Код:
#include <string.h>
#include <stdio.h>
#include <iostream>
using namespace std;

//класс Лист(двусвязный список)
class List
{
    private:
        //указатель на двумерный массив типа чар
        char** arr;
    public:
        //контсруктор
        List(){ next = prev = NULL; }
        //деструктор
        ~List(){};
        //метод(функция), которая задает значения переменной(указателя) arr
        void set(char** Arr){ arr = Arr; }
        //функция, которая возращает  указатель arr
        char** get(){ return arr; }
        //указаетль типа лист на следующий элемент списка
        List* next;
        //указатель типа лист на предудущий элемент списка
        List* prev;
}*head,*tail;//указетль на начало(head) и конец списка(tail)

//объявляем функцию Add
void Add(char** Arr);
//объявляем фунцкию out
void out();

//главная функция
int main()
{
    //указатель на файловый указаетель, который получит указатель на открытый файл
    FILE* myfile = NULL;
    //открываем файл в режиме чтения, errno_t если файл открывает возращает 0, нет  - код ошибки
    errno_t err = fopen_s(&myfile, "file.cvs", "r");
    //переменная типа чар размером 100 символов
    char line[100];
    //массив сепараторов(разделителей, по которым будем парсить строку на столбцы)
    char seps[] = " ,\t\n";
    //указатель на токен(последовательность символов), в котором будем хранить символы разделенные сепаратором
    char *token1 = NULL;
    //указатель на токен, в котором будем хранить оставшиеся символы строки
    char *next_token1 = NULL;
    //указаетль на двумерный массив типа чар
    char** arr = NULL;
    //если файл открыт
    if (!err)
    {
        //пока не конец файла
        while (!feof(myfile))
        {
            //читаем строку в переменную line 100 символов из файла
            fgets(line, 100, myfile);
            //находим токен в строке с помощью сепараторов
            token1 = strtok_s(line, seps, &next_token1);
            //выделяем память под двумерный массив на 3 указателя типа чар
            arr = new char*[3];
            //переменная для счетчика
            int idx = 0;
            //пока есть выделенные токены из строки, ищим их
            while ((token1 != NULL))
            {
                //если есть токен в строке
                if (token1 != NULL)
                {
                    //выделяем память под массив типа чар на 100 символов
                    arr[idx] = new char[100];
                    //копируют строку token1 в массив
                    strcpy_s(arr[idx],strlen(token1)+1,token1);                        
                    //printf(" %sn", token1);
                    //находим токен в строке с помощью сепараторов
                    token1 = strtok_s(NULL, seps, &next_token1);
                    //увеличиваем счетчик на 1
                    idx++;                 
                }
            }
            //вызываем функцию Add, в которую передаем указаетель на двумерный массив
            Add(arr);
        }
        //вызываем функцию out
        out();     
    }
    //закрываем файл
    fclose(myfile);
    cout << endl;
    //останавливаем консоль типа (getch())
    system("pause");
    return 0;
}

//функция добавляющая элемент в конец списка
void Add(char** Arr)
{
    //ptr - указатель на класс List
    //tmp - времменый указаетль на класс List
    //инициализируем ptr и tmp нулями
    List* ptr = NULL, *tmp = NULL;
    //добавляем элемент в список
    //если список пуст
    if (head == NULL)
    {
        //выделяем память под 1 элемент списка
        ptr = new List();
        //заполняем массив полученными токенами в строке
        ptr->set(Arr);
        //указатели на следующий и предыдущий элемент отсутствуют
        ptr->next = ptr->prev = NULL;
        //единственный элемент списка есть начало и конец списка
        head = tail = ptr;
    }
    //если в списке есть уже элементы
    else
    {
        //запоминаем указатель на последний элемент списка
        tmp = tail;
        //выделяем память под 1 элемент списка
        ptr = new List();
        //заполняем массив полученными токенами в строке
        ptr->set(Arr);
        //связываем предыдущий элемент с новым
        tmp->next = ptr;
        //связываем новый элемент с предыдущим
        ptr->prev = tmp;
        //последний элемент списка делаем новый элемент
        tail = ptr;
        //новый элемент не имеет следующего так как он последний в списке
        ptr->next = NULL;
    }
}

//функция, выводящая спика по заданому условию
void out()
{
    List* ptr = NULL;
    //ptr - указатель на класс List
    //проходим по массивам каждого элемента списка
    for (int idx = 0; idx < 3; idx++)
    {
        //указателю типа Лист присваем указатель на первый элемент списка
        ptr = head;
        //пока в списке не последний элемент
        while (ptr->next != NULL)
        {
            //выводим значения токенов из элемента списка, по заданному условию
            cout << ptr->get()[idx] << " ";
            //переходим не следующий элемент списка
            ptr = ptr->next;
        }      
        cout << endl;      
    }
}
лови пока я добрый ;)
88K
03 октября 2014 года
privod
3 / / 29.09.2014
Спасибо огромное!))) Рад, что есть такие люди!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог