Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/26: Рейтинг темы: голосов - 26, средняя оценка - 4.96
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 192
1

Замена представления даты и времени в текстовом файле

04.01.2019, 13:04. Показов 5213. Ответов 74
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа должна запускаться из командной строки с одним параметром — именем входного файла. Исходный текст состоит из слов, отделенных друг от друга пробелами. Некоторые слова представляют собой запись даты или времени. Например: 27.09.06, 09:15:00. Необходимо заменить такое представление на следующее: 27 сентябрь 2006г., 9 час 15 мин 0 сек.

Использовать структурное программирование, никаких классов и ООП. Рекомендуется выполнять через односвязные линейные списки.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2019, 13:04
Ответы с готовыми решениями:

Замена слов в одном текстовом файле словами, записанными в другом текстовом файле
Кто-нибудь пожалуйста приведете пример реализации следующей программы имеются два тектовых файла -...

Класс для представления даты и времени
Здравствуйте, знаю что уже было много тем создано с подобным вопросом. Но начал искать я уже после...

Изменение представления даты и времени в удобный вид
Добрый день! Есть список с датами и временем такого вида: 20120307 065530 Подскажите,...

Замена значения в текстовом файле
Добрый день! Есть конфигурационный файл в нём содержится строчка NewLine=1000. Как заменить...

74
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
11.01.2019, 20:52 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Kesha777 Посмотреть сообщение
Сказали чтобы готовые функции по возможности не брали, по минимуму.
Вот есть еще функция strptime(), с помощью которой можно проверить дату на валидность. Ее тоже использовать нельзя? Вообщем я понял. Вам нужно все с нуля написать. Попробую, но это займет время.

Добавлено через 3 минуты
Kesha777, а что с диапазоном годов? Его как было оставить: 1941 - 2040?
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 192
11.01.2019, 20:54  [ТС] 22
Цитата Сообщение от Fixer_84 Посмотреть сообщение
диапазоном годов
а нельзя сделать 1-9999? я с регулярками так сделал) мне вообще понравились они, жаль что нельзя...
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
11.01.2019, 21:01 23
Цитата Сообщение от Kesha777 Посмотреть сообщение
а нельзя сделать 1-9999? я с регулярками так сделал) мне вообще понравились они, жаль что нельзя...
Но ведь у вас формат даты такой dd.mm.yy. Как по двум цифрам вообще можно сделать какой-либо диапазон для годов? Тут всего остается до и после 2000 года и не более того, если, конечно, не рассматривать какой-либо отдельный век. Если ли бы цифр было 4, можно было бы говорить о таком диапазоне. Например, 0000-9999.
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 192
11.01.2019, 21:09  [ТС] 24
Fixer_84, 4 цифры, я оставил 4, разрешили.

Добавлено через 6 минут
Цитата Сообщение от Fixer_84 Посмотреть сообщение
0000
0000г не красиво. один 0 надо. так же не 0010 а 10 и не 0100 а 100. так ведь можно?
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
11.01.2019, 21:09 25
Kesha777, значит диапазон можно сделать 0-9999. Но тогда c какого момента год считать високосным? Какой календарь рассматривать? Тут очень много нюансов может появиться. Обычно берут 1900-2019, то есть по сей день.
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 192
11.01.2019, 21:15  [ТС] 26
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Обычно берут 1900-2019, то есть по сей день.
Сделайте так, не принципиально, как будет красивее и проще реализовать...
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
11.01.2019, 21:27 27
Kesha777, хорошо. Но раньше я такого не делал. Вообщем, сами посмотрите, подойдет решение или нет. Думаю, все получится.

Добавлено через 8 минут
Kesha777, у меня к вам еще вопрос. Слова в файле (дата и время) нужно именно заменять или можно просто выводить их эквиваленты в другой файл как я делал до этого?
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 192
11.01.2019, 21:30  [ТС] 28
Fixer_84, Именно заменять да, я это исправлял кстати забыл сказать. Файл один.
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
11.01.2019, 21:39 29
Kesha777, я сделаю вывод из input.txt в output.txt (но с заменой), как раньше. Вы сможете это сами поправить?

Добавлено через 5 минут
Kesha777, вам нужны будут комментарии к коду? Его тут будет много, так как все вручную.
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 192
11.01.2019, 22:13  [ТС] 30
Fixer_84, лучше бы что б в тот же файл, ну вообще это не сложно ну делайте как вам удобно

Комментарии хотелось бы конечно, иначе как я буду сдавать чужой код....
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
11.01.2019, 22:40 31
Kesha777, хорошо.
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
12.01.2019, 19:22 32
Цитата Сообщение от Kesha777 Посмотреть сообщение
Комментарии хотелось бы конечно, иначе как я буду сдавать чужой код...
Здравствуйте! Я закончил написание вашей программы. Вот код. Смотрите, тестируйте. Если будут еще вопросы, обращайтесь:

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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
#include <iostream>
#include <cctype>
#include <string>
#include <fstream>
#include <windows.h> //Шрифт консоли - Lucida Console  
 
    using namespace std;
 
//ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ И ПЕРЕМЕННЫЕ
 
int days_in_month[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; //Массив дней для каждого месяца (год не високосный)
 
string month[12] = { //Массив из 12 значений месяцев
        "январь",
        "февраль",
        "март",
        "апрель",
        "май",
        "июнь",
        "июль",
        "август",
        "сентябрь",
        "октябрь",
        "ноябрь",
        "декабрь" };
 
bool is_leap_year(int year) { //Функция проверки является ли год високосным (согласно григорианскому календарю)
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
        return true;
    }
    return false;
}
 
//ФУНКЦИИ ДЛЯ ОБРАБОТКИ ДАТЫ В ФОРМАТЕ DD.MM.YYYY
 
//1.
 
bool is_date_candidate(const string &date) { //Функция определения потенциальной даты (согласно заданному формату)
    if (date.length() == 10) {
        for (auto i : { 0, 1, 3, 4, 6, 7, 8, 9 }) { //Нужно подключить стандарт C++11 или выше
            if (!isdigit(date[i])) {
                return false;
            } 
        }
        if (date[2] != '.' || date[5] != '.') {
            return false;
        }
    return true;    
    }
return false;
}
 
//2.
 
bool is_valid_day(const string &date) { //Функция проверки валидности дня
    int day, month, year;
    day = stoi(date.substr(0, 2));
    month = stoi(date.substr(3, 2));
    year = stoi(date.substr(6, 4));
    //Проверка валидности для месяцев с 31 днем
    for (auto i : { 0, 2, 4, 6, 7, 9, 11 }) { //Нужно подключить стандарт C++11 или выше
            if (month == i + 1) {
                if (day >= 1 && day <= days_in_month[i]) {
                    return true;
            }   
        }
    }
    //Проверка валидности для месяцев с 30 днями
    for (auto i : { 3, 5, 8, 10 })  { //Нужно подключить стандарт C++11 или выше
            if (month == i + 1) {
                if (day >= 1 && day <= days_in_month[i]) {
                    return true;
            }   
        } 
    }   
    //Проверка валидности для месяца с 28 и 29 днями (для високосного и не високосного годов)
    if (month == 2) {
        if (is_leap_year(year)) {
            if (day >= 1 && day <= 29) {
                return true;
            }   
        } else {
            if (day >= 1 && day <= 28) {
                return true;
            }
        }
    }
    return false;   
}
 
//3.
 
bool is_valid_month(const string &date) { //Функция проверки валидности месяца
    int month = stoi(date.substr(3, 2));
    if (month >= 1 && month <= 12) {
        return true;
    }
    return false;
}
 
//4.
 
bool is_valid_year(const string &date) { //Функция проверки валидности года
    int year = stoi(date.substr(6, 4));
    if (year >= 1900 && year <= 2040) {
        return true;
    }
    return false;
}
 
//5.
 
bool is_valid_date(const string &date) { //Функция проверки потенциальной даты на валидность
    if (is_date_candidate(date)) {
        if ((is_valid_day(date)) &&
            (is_valid_month(date)) &&
            (is_valid_year(date))) {
                return true;
        }
        return false;
    }
    return false;
}
 
//ФУНКЦИИ ДЛЯ ОБРАБОТКИ ВРЕМЕНИ В ФОРМАТЕ HH:MM:SS
 
//1.
 
bool is_time_candidate(const string &time) { //Функция определения потенциального времени (согласно заданному формату)
    if (time.length() == 8) {
        for (auto i : { 0, 1, 3, 4, 6, 7 }) { //Нужно подключить стандарт C++11 или выше
            if (!isdigit(time[i])) {
                return false;
            } 
        }
        if (time[2] != ':' || time[5] != ':') {
            return false;
        }
    return true;    
    }
return false;
}
 
//2.
 
bool is_valid_hour(const string &time) { //Функция проверки валидности часа
    int hour = stoi(time.substr(0, 2));
    if (hour >= 0 && hour <= 23) {
        return true;
    }
    return false;
}
 
//3.
 
bool is_valid_minute(const string &time) { //Функция проверки валидности минуты
    int minute = stoi(time.substr(3, 2));
    if (minute >= 0 && minute <= 59) {
        return true;
    }
    return false;
}
 
//4.
 
bool is_valid_second(const string &time) { //Функция проверки валидности секунды
    int second = stoi(time.substr(6, 2));
    if (second >= 0 && second <= 59) {
        return true;
    }
    return false;
}
 
//5.
 
bool is_valid_time(const string &time) { //Функция проверки потенциального времени на валидность
    if (is_time_candidate(time)) {
        if ((is_valid_hour(time)) &&
            (is_valid_minute(time)) &&
            (is_valid_second(time))) {
                return true;
        }
        return false;
    }
    return false;
}
 
//ФУНКЦИИ РАБОТЫ С ОДНОСВЯЗНЫМ СПИСКОМ
 
struct node { //Узел с информацией и указателем на следующий элемент в списке
    string data; //Данные списка
    node* next; //Указатель на следующий элемент в списке
};
 
node* head = NULL; //Создаем голову списка (появился только указатель и он, пока, никуда не указывает)
  
//1.  
  
void add(string const &data) { //Функция добавления элементов в список
    node* tmp = new node; //Создаем переменную типа node
    tmp->data = data; //Записываем туда очередное значение (переменная типа string)
    tmp->next = NULL; //Пока переменная никуда не указывает (указатель указывает на NULL)
    if (head == NULL) { //Если голова списка равна NULL
        head = tmp; //Записываем в нее tmp
    } else { //Иначе
        node* tnew = head; //Создаем еще одну переменную типа node и присваиваем ей голову списка
            while (tnew->next != NULL) { //Пробегаем циклом по списку
                tnew = tnew->next; 
        }
        tnew->next = tmp; //Теперь tnew указывает на tmp
    }
}
 
//2.
 
void replace() { //Функция замены узлов односвязного списка
    node* tmp = head; //Создаем переменную типа node и присваиваем ей значение head 
    string s; //Создаем строковую переменную s (вспомогательная переменная)
    while (tmp != NULL) { //Пробегаем по списку (пока не встретим NULL)
        s = tmp->data; //Записываем значение каждого узла списка в строку s
        if (is_valid_date(s)) { //Если строка является валидной датой
            tmp->data = s.substr(0, 2) + " " + month[stoi(s.substr(3, 2)) - 1] + " " + s.substr(6, 4) + "г."; //Заменяем значение узла (даты) на новое 
        } else if (is_valid_time(s)) {  //Если строка является валидным временем
            tmp->data = s.substr(0, 2) + " час. " + s.substr(3, 2) + " мин. " + s.substr(6, 2) + " сек."; //Заменяем значение узла (даты) на новое
        } else { //Иначе
            tmp->data = s; //Оставляем значение узла списка без изменений 
        }
        tmp = tmp->next; //Переход к следующему элементу в списке
    }
}
 
//3.
 
void clear() { //Функция очистки файла input.txt
    ofstream in("input.txt", ios::out | ios::trunc);
    in.close();
}
 
//4.
 
void output() { //Функция вывода узлов односвязного списка в файл input.txt
    ofstream out("input.txt"); //Открываем файл input.txt
    node* tmp = head; //Создаем переменную типа node и присваиваем ей значение head (инициализируем список)
    while (tmp != NULL) { //Пробегаем по списку (пока не встретим NULL)
        out << tmp->data << " "; //Выводим узлы списка в файл input.txt через пробел 
        tmp = tmp->next; //Переход к следующему элементу в списке
    }
    out.close(); //Закрываем файл input.txt
}  
 
//ВЫПОЛНЕНИЕ ОСНОВНОЙ ПРОГРАММЫ
 
int main() {
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    ifstream in("input.txt"); //Открываем файл input.txt
    if (in) { //Если файл input.txt существует
        string word; //Объявляем строковую переменную (переменную типа string)
        while (in >> word) { //Пробегаем по файлу input.txt
            add(word); //Добавляем слова в односвязный список
        }
        replace(); //Заменяем соответствующие узлы в списке (корректные дата и время)
        clear(); //Очищаем файл input.txt
        output(); //Вывод измененных узлов списка в файл input.txt
        in.close(); //Закрываем файл input.txt
    } else {
        cout << "File input.txt not found!\n"; //Выводим это сообщение, если файл input.txt не найден
    }
    system("pause");
    return 0;
}
Добавлено через 14 минут
...
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 192
12.01.2019, 19:23  [ТС] 33
Fixer_84, при запуске ошибки
Миниатюры
Замена представления даты и времени в текстовом файле   Замена представления даты и времени в текстовом файле  
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
12.01.2019, 19:24 34
Kesha777, я эту программу в студии не запускал. Там скорее всего будут изменения. Сейчас запущу в студии и вам код пришлю с изменениями.
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 192
12.01.2019, 19:26  [ТС] 35
Fixer_84, Понятно. Мне нужно для студии 2017.
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
12.01.2019, 19:32 36
Kesha777, вот код в MS Visual Studio Community 2017. У меня все работает. Не забудьте создать файл input.txt.

Код:

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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
#include "stdafx.h"
#include <iostream>
#include <cctype>
#include <string>
#include <fstream>  
 
    using namespace std;
 
//ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ И ПЕРЕМЕННЫЕ
 
int days_in_month[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; //Массив дней для каждого месяца (год невисокосный)
 
string month[12] = { //Массив из 12 значений месяцев
    "январь",
    "февраль",
    "март",
    "апрель",
    "май",
    "июнь",
    "июль",
    "август",
    "сентябрь",
    "отктябрь",
    "ноябрь",
    "декабрь" };
 
bool is_leap_year(int year) { //Функция проверки является ли год високосным (согласно григорианскому календарю)
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
        return true;
    }
    return false;
}
 
//ФУНКЦИИ ДЛЯ ОБРАБОТКИ ДАТЫ В ФОРМАТЕ DD.MM.YYYY
 
//1.
 
bool is_date_candidate(const string &date) { //Функция определения потенциальной даты (согласно заданному формату)
    if (date.length() == 10) {
        for (auto i : { 0, 1, 3, 4, 6, 7, 8, 9 }) { //Нужно подключить стандарт C++11 или выше
            if (!isdigit(date[i])) {
                return false;
            }
        }
        if (date[2] != '.' || date[5] != '.') {
            return false;
        }
        return true;
    }
    return false;
}
 
//2.
 
bool is_valid_day(const string &date) { //Функция проверки валидности дня
    int day, month, year;
    day = stoi(date.substr(0, 2));
    month = stoi(date.substr(3, 2));
    year = stoi(date.substr(6, 4));
    //Проверка валидности для месяцев с 31 днем
    for (auto i : { 0, 2, 4, 6, 7, 9, 11 }) { //Нужно подключить стандарт C++11 или выше
        if (month == i + 1) {
            if (day >= 1 && day <= days_in_month[i]) {
                return true;
            }
        }
    }
    //Проверка валидности для месяцев с 30 днями
    for (auto i : { 3, 5, 8, 10 }) { //Нужно подключить стандарт C++11 или выше
        if (month == i + 1) {
            if (day >= 1 && day <= days_in_month[i]) {
                return true;
            }
        }
    }
    //Проверка валидности для месяца с 28 и 29 днями (для високосного и не високосного годов)
    if (month == 2) {
        if (is_leap_year(year)) {
            if (day >= 1 && day <= 29) {
                return true;
            }
        }
        else {
            if (day >= 1 && day <= 28) {
                return true;
            }
        }
    }
    return false;
}
 
//3.
 
bool is_valid_month(const string &date) { //Функция проверки валидности месяца
    int month = stoi(date.substr(3, 2));
    if (month >= 1 && month <= 12) {
        return true;
    }
    return false;
}
 
//4.
 
bool is_valid_year(const string &date) { //Функция проверки валидности года
    int year = stoi(date.substr(6, 4));
    if (year >= 1900 && year <= 2040) {
        return true;
    }
    return false;
}
 
//5.
 
bool is_valid_date(const string &date) { //Функция проверки потенциальной даты на валидность
    if (is_date_candidate(date)) {
        if ((is_valid_day(date)) &&
            (is_valid_month(date)) &&
            (is_valid_year(date))) {
            return true;
        }
        return false;
    }
    return false;
}
 
//ФУНКЦИИ ДЛЯ ОБРАБОТКИ ВРЕМЕНИ В ФОРМАТЕ HH:MM:SS
 
//1.
 
bool is_time_candidate(const string &time) { //Функция определения потенциального времени (согласно заданному формату)
    if (time.length() == 8) {
        for (auto i : { 0, 1, 3, 4, 6, 7 }) { //Нужно подключить стандарт C++11 или выше
            if (!isdigit(time[i])) {
                return false;
            }
        }
        if (time[2] != ':' || time[5] != ':') {
            return false;
        }
        return true;
    }
    return false;
}
 
//2.
 
bool is_valid_hour(const string &time) { //Функция проверки валидности часа
    int hour = stoi(time.substr(0, 2));
    if (hour >= 0 && hour <= 23) {
        return true;
    }
    return false;
}
 
//3.
 
bool is_valid_minute(const string &time) { //Функция проверки валидности минуты
    int minute = stoi(time.substr(3, 2));
    if (minute >= 0 && minute <= 59) {
        return true;
    }
    return false;
}
 
//4.
 
bool is_valid_second(const string &time) { //Функция проверки валидности секунды
    int second = stoi(time.substr(6, 2));
    if (second >= 0 && second <= 59) {
        return true;
    }
    return false;
}
 
//5.
 
bool is_valid_time(const string &time) { //Функция проверки потенциального времени на валидность
    if (is_time_candidate(time)) {
        if ((is_valid_hour(time)) &&
            (is_valid_minute(time)) &&
            (is_valid_second(time))) {
            return true;
        }
        return false;
    }
    return false;
}
 
//ФУНКЦИИ РАБОТЫ С ОДНОСВЯЗНЫМ СПИСКОМ
 
struct node { //Узел с информацией и указателем на следующий элемент в списке
    string data; //Данные списка
    node* next; //Указатель на следующий элемент в списке
};
 
node* head = NULL; //Создаем голову списка (появился только указатель и он, пока, никуда не указывает)
 
                   //1.  
 
void add(string const &data) { //Функция добавления элементов в список
    node* tmp = new node; //Создаем переменную типа node
    tmp->data = data; //Записываем туда очередное значение (переменная типа string)
    tmp->next = NULL; //Пока переменная никуда не указывает (указатель указывает на NULL)
    if (head == NULL) { //Если голова списка равна NULL
        head = tmp; //Записываем в нее tmp
    }
    else { //Иначе
        node* tnew = head; //Создаем еще одну переменную типа node и присваиваем ей голову списка
        while (tnew->next != NULL) { //Пробегаем циклом по списку
            tnew = tnew->next;
        }
        tnew->next = tmp; //Теперь tnew указывает на tmp
    }
}
 
//2.
 
void replace() { //Функция замены узлов односвязного списка
    node* tmp = head; //Создаем переменную типа node и присваиваем ей значение head 
    string s; //Создаем строковую переменную s (вспомогательная переменная)
    while (tmp != NULL) { //Пробегаем по списку (пока не встретим NULL)
        s = tmp->data; //Записываем значение каждого узла списка в строку s
        if (is_valid_date(s)) { //Если строка является валидной датой
            tmp->data = s.substr(0, 2) + " " + month[stoi(s.substr(3, 2)) - 1] + " " + s.substr(6, 4) + "г."; //Заменяем значение узла (даты) на новое 
        }
        else if (is_valid_time(s)) {  //Если строка является валидным временем
            tmp->data = s.substr(0, 2) + " час. " + s.substr(3, 2) + " мин. " + s.substr(6, 2) + " сек."; //Заменяем значение узла (даты) на новое
        }
        else { //Иначе
            tmp->data = s; //Оставляем значение узла списка без изменений 
        }
        tmp = tmp->next; //Переход к следующему элементу в списке
    }
}
 
//3.
 
void clear() { //Функция очистки файла input.txt
    ofstream in("input.txt", ios::out | ios::trunc);
    in.close();
}
 
//4.
 
void output() { //Функция вывода узлов односвязного списка в файл input.txt
    ofstream out("input.txt"); //Открываем файл input.txt
    node* tmp = head; //Создаем переменную типа node и присваиваем ей значение head (инициализируем список)
    while (tmp != NULL) { //Пробегаем по списку (пока не встретим NULL)
        out << tmp->data << " "; //Выводим узлы списка в файл input.txt через пробел 
        tmp = tmp->next; //Переход к следующему элементу в списке
    }
    out.close(); //Закрываем файл input.txt
}
 
//ВЫПОЛНЕНИЕ ОСНОВНОЙ ПРОГРАММЫ
 
int main() {
    setlocale(LC_ALL, "Russian");
    ifstream in("input.txt"); //Открываем файл input.txt
    if (in) { //Если файл input.txt существует
        string word; //Объявляем строковуюю переменную (переменную типа string)
        while (in >> word) { //Пробегаем по файлу input.txt
            add(word); //Добавляем слова в односвязный список
        }
        replace(); //Заменяем соответствующие узлы в списке (корректные дата и время)
        clear(); //Очищаем файл input.txt
        output(); //Вывод измененных узлов списка в файл input.txt
        in.close(); //Закрываем файл input.txt
    }
    else {
        cout << "File input.txt not found!\n"; //Выводим это сообщение, если файл input.txt не найден
    }
    system("pause");
    return 0;
}
Добавлено через 1 минуту
Kesha777, обязательно покажите ошибки, если еще остались.
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 192
12.01.2019, 19:48  [ТС] 37
Fixer_84, ругается на первую строчку. можно ли без "stdafx.h"?
Миниатюры
Замена представления даты и времени в текстовом файле  
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 192
12.01.2019, 19:51  [ТС] 38
вообще в функции определения времени ругается на if (!isdigit(time[i])). что такое isdigit? можно без него?
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,162
12.01.2019, 19:54 39
Цитата Сообщение от Kesha777 Посмотреть сообщение
Fixer_84, ругается на первую строчку. можно ли без "stdafx.h"?
можно без этого

Цитата Сообщение от Kesha777 Посмотреть сообщение
вообще в функции определения времени ругается на if (!isdigit(time[i])). что такое isdigit? можно без него?
isdigit - судя по названию, проверка на цифру, наверное, без этого нельзя; загуглите инклюд или напишите свою функцию
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
12.01.2019, 20:00 40
Kesha777, вы когда проект в студии создаете, он вам какой заголовочный файл по умолчанию создает? У меня создает
C++
1
 #include "stdafx.h"
и без него никак. Но может быть еще #include "pch.h". Проверьте это.
Цитата Сообщение от Kesha777 Посмотреть сообщение
что такое isdigit?
Эта функция проверяет является ли символ числом. Можете написать еще так:
C++
1
if (!(time[i] >= '0' && time[i] <= '9')) {
Но тогда это везде изменять нужно.
0
12.01.2019, 20:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2019, 20:00
Помогаю со студенческими работами здесь

Замена слов в текстовом файле
Нужна помощь, как в текстовом файле изменить слово, например, &quot;Black&quot; на &quot;White&quot;?

Замена текста в текстовом файле
Здравствуйте! Может кто подскажет как можно заменить текст в текстовом файле? Буду благодарен. ...

Замена символов в текстовом файле
Добрый день , есть батник в котором пробелы меняются на , Необходимо чтобы пробелы менялись на...

Поиск и замена в текстовом файле
Здравствуйте! Очень нуждаюсь в Вашей помощи. Перепробовала все найденные мною варианты решения...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru