Форум программистов, компьютерный форум CyberForum.ru

Односвязные лнейные списки - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ класс Time http://www.cyberforum.ru/cpp-beginners/thread151369.html
у класса Time скрытые переменные - minutes и hours. функция-член должна принять ссылку на оъект Time и... короче, вот код: Time Time::sum(Time & s) { sum.hours=s.hours+hours; sum.minutes=s.minutes+minutes; if (sum.minutes>=60) { sum.hour++; sum.minutes-=60; }
C++ Копирование одной строки в другую циклом for Добрый день! есть программа, в которой пытаюсь скопировать одну строку в другую(без использования strcpy()) : int _tmain(int argc, _TCHAR* argv) { char b; // 1я строка char c; // 2я строка gets(b); // считываю строку b (строка всегда =< 14 символам) for (int i=0;b;i++) {c=b;} http://www.cyberforum.ru/cpp-beginners/thread151360.html
C++ Порязрядные операции в С
В чем разница между операторами ! и ~? Как я понимаю, оба оператора преобразуют единичные биты в нулевые и наоборот, но почему printf("%d", !0) выводит 1, а printf("%d", ~0) выводит -1?
C++ Вызов из потомка конструктор родителя
Как на с++ вызывается конструктор-родителя от конструктора-потомка. На яве так работает: package u; class A{ private int a,b,c; A(){} A(int x1, int y1, int z1){ a = x1; b = y1; c = z1; }
C++ считать из файла http://www.cyberforum.ru/cpp-beginners/thread151347.html
помогите написать функцию которая считает из файла множество цифр и разобьёт по-битам т.е. представит в виде последовательности из 1 и 0 Добавлено через 2 часа 20 минут чтобы последовательность была массивом
C++ Конструкторы и деструкторы функционального объекта Привет всем. Вообщем разбирал задачу, в которой рассматривается алгоритм for_each, я решил добавить отладочный вывод в конструктор и деструктор чтобы посмотреть сколько раз они вызываются и честно говоря результат меня удивил #include <iostream> #include <algorithm> using namespace std; class display{ private: int i; подробнее

Показать сообщение отдельно
Гамбит
13 / 13 / 1
Регистрация: 19.10.2009
Сообщений: 93
10.07.2010, 19:32  [ТС]     Односвязные лнейные списки
Вот собственно прокоментировал что понял (ну или думаю что понял)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct WRD {
        char * text;
        struct WRD * next;
} wrd_t;
 
wrd_t * new_word(const char * s, wrd_t * last);/*Функция определяет слово*/
wrd_t * words_from_file(const char * file_name);/*Определяет границы слова*/
void print_contains(const wrd_t * list, const char * s);/*нафиг не надо*/
int double_contains(wrd_t * list, const char * s);/*вносит дублируемое слово*/
void print_list(const wrd_t * list);/*Вывод на экран*/
void delete_words(wrd_t * list);/*это я не понял*/
 
int main(void){
        char buf[BUFSIZ];
        wrd_t * list;
        int cnt;
 
        printf("Name of input file: ");
        if ( scanf("%s", buf) != 1 ){
                perror("scanf");   /*с perror я не очень разобрался, но похоже она отвечает за вывод stderr */
                exit(EXIT_FAILURE); /*завершение программы,но почему нельзя написать exit(1)*/
        }
        if ( ( list = words_from_file(buf) ) == NULL ){
                fprintf(stderr, "Can't get words from file %s\n", buf);
                exit(EXIT_FAILURE);/*собственно завершение программы , если неправильно указано имя файла*/
        }
 
        printf("\nWords in file:\n");
        print_list(list);/*Выводит все слова из файла на экран*/
 
        printf("\nWhat to searching for: ");
        if ( scanf("%s", buf) != 1 ){
                perror("scanf");
                delete_words(list);
                exit(EXIT_FAILURE);/*вводим фрагмент*/
        }
        /* print_contains(list, buf); */
        if ( ( cnt = double_contains(list, buf) ) < 0 ){
                fprintf(stderr, "Memory or unknown error!\n");
                delete_words(list);
                exit(EXIT_FAILURE);/*завершение программы, если нет повторений*/
        }
 
        printf("\n%d words was doubled.\n", cnt);
        print_list(list);/*выводим результирующую строку*/
 
        delete_words(list);
        exit(EXIT_SUCCESS);
}
 
wrd_t * new_word(const char * s, wrd_t * last){
        wrd_t * w;
        if ( ( w = (wrd_t*)malloc(sizeof(wrd_t)) ) == NULL )/*если выделение памяти=0. то возвращаем 0(зачем?)*/
                return NULL;
        if ( ( w->text = strdup(s) ) == NULL ){/*если не получилось присоеденить память, то осовбождаем память и возвращаем 0*/
                free(w);
                return NULL;
        }/*далше не понятно=(*/
        w->next = NULL;
        if ( last )
                last->next = w;
        return w;
}
 
wrd_t * words_from_file(const char * file_name){
        FILE * f;
        wrd_t * first, * last;
        static char buf[BUFSIZ];
 
        if ( ( f = fopen(file_name, "r") ) == NULL )/*Если файл не открыт, возвращаем 0*/
                return NULL;
        first = last = NULL;/*это как я понимаю указатели на начало и конец слова*/
        while ( fscanf(f, "%s", buf) == 1 ){
                if ( ( last = new_word(buf, last) ) == NULL )/*это не понятно=(*/
                        return NULL;
                if ( ! first )/*если указатель отличен от 0, то присваеваем ему last*/
                        first = last;
        }
        fclose(f);
        return first;
}
 
void print_contains(const wrd_t * list, const char * s){/*лишняя функция=)*/
        while ( list ){
                if ( strstr(list->text, s) )
                        printf("%s\n", list->text);
                list = list->next;
        }
}
 
void delete_words(wrd_t * list){/*это удаление чего-то, не понятно для чего*/
        wrd_t * tmp;
        while ( list ){
                tmp = list->next;
                free(list->text);
                free(list);
                list = tmp;
        }
}
 
int double_contains(wrd_t * list, const char * s){
        int cnt = 0;
        wrd_t * dbl;
        while ( list ){
                if ( strstr(list->text, s) ){/*собственно если есть вхождения фрагмента*/
                        if ( ( dbl = new_word(list->text, NULL) ) == NULL ){/*это похоже отвечает за выход. если нет вхождений*/
                                fprintf(stderr, "Can't double word!\n");
                                return -1;
                        }
                        dbl->next = list->next;/*собственно добавление дублируемого слова*/
                        list->next = dbl;
                        list = list->next;
                        ++cnt;
                }
                list = list->next;
        }
        return cnt;
}
 
void print_list(const wrd_t * list){/*вывод на экран*/
        while ( list ){
                printf("%s\n", list->text);
                list = list->next;
        }
}
 
Текущее время: 14:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru