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

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

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

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

Использовать структурное программирование, никаких классов и ООП. Рекомендуется выполнять через односвязные линейные списки.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.01.2019, 13:04
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

Комментарии хотелось бы конечно, иначе как я буду сдавать чужой код....
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
11.01.2019, 22:40
Kesha777, хорошо.
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
12.01.2019, 19:22
Цитата Сообщение от 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  [ТС]
Fixer_84, при запуске ошибки
Миниатюры
Замена представления даты и времени в текстовом файле   Замена представления даты и времени в текстовом файле  
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
12.01.2019, 19:24
Kesha777, я эту программу в студии не запускал. Там скорее всего будут изменения. Сейчас запущу в студии и вам код пришлю с изменениями.
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 192
12.01.2019, 19:26  [ТС]
Fixer_84, Понятно. Мне нужно для студии 2017.
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
12.01.2019, 19:32
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  [ТС]
Fixer_84, ругается на первую строчку. можно ли без "stdafx.h"?
Миниатюры
Замена представления даты и времени в текстовом файле  
0
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 192
12.01.2019, 19:51  [ТС]
вообще в функции определения времени ругается на if (!isdigit(time[i])). что такое isdigit? можно без него?
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
12.01.2019, 19:54
Цитата Сообщение от Kesha777 Посмотреть сообщение
Fixer_84, ругается на первую строчку. можно ли без "stdafx.h"?
можно без этого

Цитата Сообщение от Kesha777 Посмотреть сообщение
вообще в функции определения времени ругается на if (!isdigit(time[i])). что такое isdigit? можно без него?
isdigit - судя по названию, проверка на цифру, наверное, без этого нельзя; загуглите инклюд или напишите свою функцию
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
12.01.2019, 20:00
Kesha777, вы когда проект в студии создаете, он вам какой заголовочный файл по умолчанию создает? У меня создает
C++
1
 #include "stdafx.h"
и без него никак. Но может быть еще #include "pch.h". Проверьте это.
Цитата Сообщение от Kesha777 Посмотреть сообщение
что такое isdigit?
Эта функция проверяет является ли символ числом. Можете написать еще так:
C++
1
if (!(time[i] >= '0' && time[i] <= '9')) {
Но тогда это везде изменять нужно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.01.2019, 20:00

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru