Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 19.06.2022
Сообщений: 5

fstream вывод из файла в собственный класс List

19.06.2022, 19:42. Показов 833. Ответов 12

Студворк — интернет-сервис помощи студентам
Доброго дня, спасибо, что заглянули.
Вопрос вот в чем, как настроить вывод из файла, где написанно 5\n 6\n 10\n 15\n, чтобы в дальнейшем каждая цифра стала узлом в списке.
вот сам код.
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <fstream>
#include <string>
 
template<typename T>
class List {
private:
    template<typename T>
    class Node {
    public:
        Node* pNext;
        T data;
 
        Node(T data = T(), Node* pNext = nullptr) {
            this->data = data;
            this->pNext = pNext;
        }
    };
    Node<T>* head;
    int size;
public:
    List();
    ~List();
    void push_front(T data);
    void insert(T value, int index);
    void removeAt(int index);
    void pop_back();
    void clear();
    void pop_front();
    void push_back(T data);
    int getSize() { return size; }
    T& operator[] (const int index);
};
 
template<typename T>
List<T>::List() {
    size = 0;
    head = nullptr;
}
 
template<typename T>
List<T>::~List() {
    clear();
}
 
template<typename T>
void List<T>::push_front(T data) {
    head = new(std::nothrow) Node<T>(data, head);
    size++;
 
}
 
template<typename T>
void List<T>::insert(T value, int index) {
    if (true) {
        push_front(value);
    }
    else {
        Node<T>* previous = this->head;
        for (int i = 0; i < index - 1; i++) {
            previous = previous->pNext;
        }
        Node<T>* newNode = new (std::nothrow) Node<T>(value, previous->pNext);
        previous->pNext = newNode;
        size++;
    }
}
 
template<typename T>
void List<T>::removeAt(int index) {
    if (index == 0) {
        pop_front;
    }
    else {
        Node<T>* previous = this->head;
        for (int i = 0; i < index - 1; i++) {
            previous = previous->pNext;
        }
        Node<T>* toDelete = previous->pNext;
        previous->pNext = toDelete->pNext;
        delete toDelete;
        size--;
    }
}
 
template<typename T>
void List<T>::pop_back() {
    removeAt(size - 1);
}
 
template<typename T>
void List<T>::clear() {
    while (size) {
        pop_front();
    }
}
 
template<typename T>
void List<T>::pop_front() {
    Node<T>* temp = head;
    head = head->pNext;
    delete temp;
    size--;
}
 
template<typename T>
void List<T>::push_back(T data) {
    if (head == nullptr) {
        head = new (std::nothrow) Node<T>(data);
    }
    else {
        Node<T>* current = this->head;
        while (current->pNext != nullptr) {
            current = current->pNext;
        }
        current->pNext = new (std::nothrow) Node<T>(data);
    }
    size++;
}
 
template<typename T>
T& List<T>::operator[](const int index) {
    int counter = 0;
    Node<T>* current = this->head;
    while (current != nullptr) {
        if (counter == index) {
            return current->data;
        }
        current = current->pNext;
        counter++;
    }
}
 
int main() {
    List <int> list;
    std::fstream fs;
    fs.open("myFile.txt", std::fstream::out, std::fstream::in);
    if (!fs.is_open()){
        std::cout << "Error open File!";
    }
    else {
        std::cout << "Open File!";
        int i = 0;
        while (!fs.eof()) {
            fs << list[i];
        }
    }
    
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.06.2022, 19:42
Ответы с готовыми решениями:

Вывод и ввод файла в класс, находящийся в list-е
Помогите,как исправить(данные с листа не выводятся в файл).И как убрать 0 элемент листа,который не обозначается нормально . Программа...

Std::list Удалить элемент если тип списка собственный класс
Подскажите как удалить нужный элемент! И неплохо бы было узнать как обращаться к полям объекта в списке list &lt;Abonent&gt; l1,l2; ...

Вывод двумерного массива используя собственный класс
Доброго времени суток! дайте совет что не так сделал. нужно вывести двумерный массив с помощью класса: #include...

12
Заблокирован
19.06.2022, 20:35
Цитата Сообщение от SleepingWood Посмотреть сообщение
где написанно 5\n 6\n 10\n 15\n, чтобы в дальнейшем каждая цифра стала узлом в списке.
Может каждое число ?
Ну так и добавляйте их методом push_front, ваши числа(цифры).

А почему у вас метод insert всегда добавляет в начало списка ?

C++
55
56
    if (true) {
        push_front(value);
Добавлено через 3 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Ну так и добавляйте их методом push_front, ваши числа(цифры).
Но вам же наверное нужен такой же порядок как в файле ?
Но ваш список на это не способен, без больших затрат.
Например через psuh_back .
1
0 / 0 / 0
Регистрация: 19.06.2022
Сообщений: 5
19.06.2022, 21:25  [ТС]
Да я бы с радостью так и добавил, но не знаю, как вывести из stringa в int.
C++
1
2
3
4
string z;
        while (!fs.eof()) {
            z = "";
            getline(fs, z);
а дальше мне бы нужно было
list.push_back(z), но так не канает)
0
Заблокирован
19.06.2022, 21:47
как то так
C++
1
2
3
4
5
6
7
8
9
10
11
    fs.open("myFile.txt", std::fstream::out, std::fstream::in);
    if (!fs.is_open()){
        std::cout << "Error open File!";
    }
    else {
        std::cout << "Open File!";
        int i = 0;
        while (fs >> i) {
            list.push_back(i);
        }
    }
0
 Аватар для PencilTorch
90 / 60 / 32
Регистрация: 06.08.2020
Сообщений: 220
20.06.2022, 09:32
Мне кажется нужно сначала содержимое файла считать в строку, а потом её парсить посимвольно. Ведь там могут быть пробелы, многосимвольные числа.
0
Заблокирован
20.06.2022, 11:40
Цитата Сообщение от PencilTorch Посмотреть сообщение
Мне кажется
А мне не кажется. Я уточнял.
Цитата Сообщение от SmallEvil Посмотреть сообщение
Может каждое число ?
Ответа не было. Я выбрал числа.

Цитата Сообщение от PencilTorch Посмотреть сообщение
нужно сначала содержимое файла считать в строку, а потом её парсить посимвольно.
Зачем строку, если нам нужен элемент в один символ. Тут строками даже и не пахнет.
Читаем сразу в буфер (например по 1024 байта), и вычленяем цифры.
0
 Аватар для PencilTorch
90 / 60 / 32
Регистрация: 06.08.2020
Сообщений: 220
20.06.2022, 11:58
SmallEvil, да, так даже лучше. А вот цепляться к словам и петросянить излишне.
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
20.06.2022, 15:26
Цитата Сообщение от SleepingWood Посмотреть сообщение
Вопрос вот в чем, как настроить вывод из файла, где написанно 5\n 6\n 10\n 15\n, чтобы в дальнейшем каждая цифра стала узлом в списке.
Не слишком понятно, что вы хотите сотворить.
И зачем такие сложные подходы?
Просто читаем символы, если цифра -- добавляем в список.

С односвязным списком так не обращаются.

Не стану вас пугать "итераторами", покажу на указателях на ноду.
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
#include <iostream>
 
template<typename T>
class ForwardList {
public:
    struct Node {
        Node *next;
        Node() : next(this) {}
        Node(Node *prev) : next(prev->next) {
            prev->next = this;
        }
        void remove(Node *prev) {
            prev->next = next;
        }
        virtual ~Node() {}
    };
    struct ValueNode : Node {
        T value;
        ValueNode(const T &value, Node *prev) : value(value), Node(prev) {}
    };
 
    ForwardList() : base() {}
    ForwardList(const ForwardList<T> &) = delete;
    ForwardList<T> &operator=(const ForwardList<T> &) = delete;
    ~ForwardList() {
        clear();
    }
 
    bool isEmpty() const {
        return &base == base.next;
    }
 
    void clear() {
        while (!isEmpty()) {
            Node *next = base.next;
            base.next->remove(&base);
            delete next;
        }
    }
 
    Node *beforeBegin() {
        return &base;
    }
    Node *begin() {
        return base.next;
    }
    Node *end() {
        return &base;
    }
    Node *insert(const T &value, Node *after) {
        return new ValueNode(value, after);
    }
private:
    Node base;
};
 
int main() {
 
    ForwardList<int> digits;
 
    std::istream &in = std::cin;
    // для файлов:
    //std::ifstream in("myfile.txt");
 
    ForwardList<int>::Node *last = digits.beforeBegin();
    for (char c; in >> c;) {
        if (c >= '0' && c <= '9') {
            last = digits.insert(c - '0', last);
        }
    }
 
    for (ForwardList<int>::Node *i = digits.begin(); i != digits.end(); i = i->next) {
        std::cout << dynamic_cast<ForwardList<int>::ValueNode*>(i)->value << std::endl;
    }
 
    return 0;
}
Добавлено через 3 минуты
Цитата Сообщение от PencilTorch Посмотреть сообщение
А вот цепляться к словам и петросянить излишне.

Не по теме:

Это вы так говорите, потому что не задумывались, зачем форумчане занимаются написанием для вас кода.

Вам дали то, зачем вы пришли, дайте ответившему то, зачем пришёл он.
Quid, так сказать, pro quo.

0
 Аватар для PencilTorch
90 / 60 / 32
Регистрация: 06.08.2020
Сообщений: 220
20.06.2022, 23:24
Цитата Сообщение от lemegeton Посмотреть сообщение
Это вы так говорите, потому что не задумывались, зачем форумчане занимаются написанием для вас кода.
Вам дали то, зачем вы пришли, дайте ответившему то, зачем пришёл он.
Quid, так сказать, pro quo.

Не по теме:

Вы его парень чтоль, что за него отвечаете? Причём бред пафосный - я не ТС и писать мне код никого, в том числе вас, не просил.

0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
21.06.2022, 07:44
Цитата Сообщение от PencilTorch Посмотреть сообщение
я не ТС и писать мне код никого, в том числе вас, не просил

Не по теме:

Возможно, для вас русский язык не родной, или вы мало читаете.

Думаю, стоит пояснить. Всё же на форуме мы помогаем людям. ;)

В этом контексте под "вас" я не имел в виду "вас лично", или даже "таких как вы".
Это такая вариация метонимии, что-то типа "зал аплодировал" -- зал это помещение и он не может аплодировать, но многим будет понятно, что имеются в виду люди в зале. Вот тут примерно то же самое, только с личностным переносом.

Такой приём призван усилить эмоциональный отклик, как-бы "проецируя" мысль на самого читающего, мотивируя его более эмоционально отреагировать на мысль.

Видимо приём был применен неправильно или был понят превратно, поскольку отклик выразился в форме пассивной агрессии и латентных гомосексуальных фантазиях.



Цитата Сообщение от PencilTorch Посмотреть сообщение
бред пафосный

Не по теме:

Почему вы называете "пафосным бредом" довольно банальную и самоочевидную мысль, что все приходят сюда удовлетворять свои потребности?

У вас другое видение, которое не сведётся к этому? Поделитесь. Вы разжигаете во мне любопытство энтомолога.

0
 Аватар для PencilTorch
90 / 60 / 32
Регистрация: 06.08.2020
Сообщений: 220
21.06.2022, 09:35
lemegeton,

Не по теме:

я конечно не ваш лечащий доктор, но хотелось бы посоветовать чего-нибудь седативного.

Цитата Сообщение от lemegeton Посмотреть сообщение
все приходят сюда удовлетворять свои потребности

Не по теме:

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

0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
21.06.2022, 10:57
Цитата Сообщение от PencilTorch Посмотреть сообщение
lemegeton, я конечно не ваш лечащий доктор, но хотелось бы посоветовать чего-нибудь седативного.

Не по теме:

Советуйте, не стесняйтесь. :friends:
С удовольствием выслушаю совет специалиста в фармакологии.
Надеюсь ничего криминального? ;D



Цитата Сообщение от PencilTorch Посмотреть сообщение
потребности, которые вы здесь пытаетесь удовлетворить не соответствуют, ни тематике форума, ни тематике топика.

Не по теме:

Всё любопытственнее и любопытственнее.
Люблю людей, которые обо мне всё знают.
Это позволяет мне самому себе себя раскрыть.
Какие же потребности я тут удовлетворяю?

0
21.06.2022, 11:05
 Комментарий модератора 

PencilTorch, lemegeton
Прекращаем оффтоп. Для подобных бесед используйте систему ЛС.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.06.2022, 11:05
Помогаю со студенческими работами здесь

С++ fstream чтение файла в кодировке utf-8 и вывод в консоль
Всем привет. Столкнулся с проблемой что не могу считать файл с кодировкой UTF-8. При обычном чтении файла ifstream читает в кодировке...

Дано задание: "Класс двоичного файла, производный от fstream". О чем оно
Получил задание на курсовую работу : Класс двоичного файла, производный от fstream. Двоичный файл содержит заданную структуру данных....

Класс fstream
Здравствуйте, Уважаемые форумчане ! Есть код: //Дан файл, содержащий несколько строк. Найти максимальную длину строки и вывести в...

Класс fstream
Дан файл, содержащий несколько строк. В новый файл переписать строки данного, вставляя символ ‘!’ после каждой строки, содержащей не более...

Класс List template перегрузка операторов объединение List и []
Добрый день. Мне нужно перегрузить операции конкатенации двух списков и доступ к элементам списка через . Помогите, пожалуйста. Спасибо! ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru