Форум программистов, компьютерный форум 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; подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.07.2010, 22:55     Односвязные лнейные списки
Цитата Сообщение от Гамбит Посмотреть сообщение
а мне нужно дублировать
ну добавить немного...
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");
        exit(EXIT_FAILURE);
    }
    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 )
        return NULL;
    if ( ( w->text = strdup(s) ) == NULL ){
        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 )
        return NULL;
    first = last = NULL;
    while ( fscanf(f, "%s", buf) == 1 ){
        if ( ( last = new_word(buf, last) ) == NULL )
            return NULL;
        if ( ! first )
            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;
    }
}
Добавлено через 1 минуту
На всякий случай: точно обратно в файл писать не нужно?
 
Текущее время: 22:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru