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

Программа, которая считывает текст из файла и записывает в другой файл строки, не содержащие двузначные числа

07.01.2021, 23:25. Показов 1585. Ответов 11

Author24 — интернет-сервис помощи студентам
Приветствую, вот задание:
"Написать программу, которая считывает текст из файла и записывает в другой файл строки, не содержащие двузначные числа"

Вот рабочий код, но чтение идет не из файла:
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
#include <iostream>
#include <fstream>
using namespace std;
 
bool has_dig2num(const char* line);
 
int main(void)
{
            const char* line[] = {
            "abcd", "efgh", "abcd7", "efgh7",
            "ab88cd", "11efgh", "11abcd11", "efgh11",
            "ab888cd", "111efgh", "11abcd111", "efgh111",
            "ab8c8d", "1efgh1"
        };
 
        for (int i = 0; i < (int)(sizeof line / sizeof line[0]); i++)
 
            if (has_dig2num(line[i]) == false)
                        cout << line[i] << " ";
    
            return 0;
}
 
bool has_dig2num(const char* line)
{
    for (; *line != '\0'; line++)
        if (isdigit(*line) && *(line + 1) != '\0') {
            int i = 0;
            while (isdigit(*line)) {
                if (++i > 2)
                    return false;
                line++;
            }
            if (i == 2)
                return true;
        }
    return false;
}
Когда я переделала код так, чтобы те же данные читались из файла:
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
#include <iostream>
#include <fstream>
using namespace std;
 
bool has_dig2num(const char* line);
 
int main(void)
{
    
    char line[1000];
    ifstream file("F:/Text/ext.txt");
 
    if (file.is_open())
        cout << "OK" << endl;
    else
    {
        cout << "No ok";
        return -1;
    }
 
    while (!file.eof())
    {
        file.getline(line, 1000, '\n');
 
            if (has_dig2num(line))
              cout << line<< " ";}
 
        return 0;
}
 
bool has_dig2num(const char* line)
{
    for (; *line != '\0'; line++)
        if (isdigit(*line) && *(line + 1) != '\0') {
            int i = 0;
            while (isdigit(*line)) {
                if (++i > 2)
                    return false;
                line++;
            }
            if (i == 2)
                return true;
        }
    return false;
}
То конструкция, которая была до этого
C++
1
if (has_dig2num(line[i]) == false)
Здесь не пашет
C++
1
if (has_dig2num(line)==false)
Как правильно нужно было переделать код, чтобы он работал как до этого?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2021, 23:25
Ответы с готовыми решениями:

Программа, которая считывает текст из файла и выводит на экран строки, содержащие двузначные числа
В чтении/записи файлов я ничего не понимаю, поэтому обращаюсь сюда. разобрав задачу, я примерно...

Написать программу, которая считывает текст из файла и записывает в другой файл только предложения не содержащие запятых
Написать программу, которая считывает текст из файла и записывает в другой файл только предложения,...

Написать программу которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа
Всем привет, прошу помощи, так как сам не могу доделать, мне нужно написать программу которая...

Написать программу, которая считывает текст из файла и выводит на экран только строки, не содержащие двузначные числа
Написать программу, которая считывает текст из файла и записывает его в лист1 и из листа1 выводит...

11
Just Do It!
4027 / 2421 / 640
Регистрация: 23.09.2014
Сообщений: 7,800
Записей в блоге: 2
08.01.2021, 05:07 2
Pincd,
исправить:
C++
25
    if (!has_dig2num(line))
или так и пишите:
C++
25
    if (has_dig2num(line)==false)
или:
в
bool has_dig2num(const char* line)
поменять в ретурне тру на фолс, а фолс на тру.


А вообще то сравните то, что у вас:
Было:
Цитата Сообщение от Pincd Посмотреть сообщение
Здесь не пашет
C++Выделить код
1
if (has_dig2num(line)==false)
Стало:
Цитата Сообщение от Pincd Посмотреть сообщение
if (has_dig2num(line))
1
0 / 0 / 0
Регистрация: 12.10.2020
Сообщений: 30
08.01.2021, 14:21  [ТС] 3
Спасибо за ответ! НО:
Pincd,
исправить:
C++
1
if (!has_dig2num(line))
это не работает
или так и пишите:
C++
1
 if (has_dig2num(line)==false)
это я итак писала и это не работает, поэтому я обратилась на форум
или:
в
bool has_dig2num(const char* line)
поменять в ретурне тру на фолс, а фолс на тру.
это я тоже делала - не помогло

мне кажется, что здесь надо сделать какое-то более глобальное изменение, но я не знаю какое. А при вот таком исправлении как у нас с Вами в итоге консоль либо ничего не выдает либо выдает все что в файле было.

Мне кажется, что ошибка в том, что я не пишу [i], но я, при чтении из файла, не могу написать так:
C++
1
2
 if (has_dig2num(line[i]))
 cout << line[i]<< " ";
потому что компилятор ругается, а как тогда быть? Мне кажется, что ошибка именно в том, что я во втором варианте опускаю [i]
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.01.2021, 14:29 4
Pincd, покажите как записаны данные в файле
0
0 / 0 / 0
Регистрация: 12.10.2020
Сообщений: 30
08.01.2021, 15:36  [ТС] 5
вот так:
abcd efgh abcd7 efgh7 ab88cd 11efgh 11abcd11 efgh11 ab8c8d 1efgh1
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.01.2021, 16:05 6
у Вас в файле всего одна строка, она и обрабатывается

не по вопросу: не используйте eof при чтении с файла

после чтения добавьте строку file.close();
0
0 / 0 / 0
Регистрация: 12.10.2020
Сообщений: 30
08.01.2021, 16:29  [ТС] 7
Как я поняла, вы имели в виду это:
В первом варианте данные в массив записываются построчно:
Название: 1-вариант.jpg
Просмотров: 61

Размер: 37.5 Кб
А во втором посимвольно:
Название: 2-вариант.jpg
Просмотров: 61

Размер: 16.3 Кб
А как сделать, чтобы программа, считывая данные с файла, записывала их в массив также построчно как в первый раз?
не по вопросу: не используйте eof при чтении с файла
Вы имели в виду, что в конкретном примере лучше не использовать?
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.01.2021, 18:05 8
Лучший ответ Сообщение было отмечено Pincd как решение

Решение

Pincd, неправильно понимаете. это:
Цитата Сообщение от Pincd Посмотреть сообщение
abcd efgh abcd7 efgh7 ab88cd 11efgh 11abcd11 efgh11 ab8c8d 1efgh1
одна строка

это:
abcd
efgh
abcd7
три строки

Вы файл сами формировали ? то есть или Вы ошиблись при формировании файла или ошиблись в условии задачи (не строки, а слова записывать)

Цитата Сообщение от Pincd Посмотреть сообщение
в конкретном примере лучше не использовать?
вообще не используйте eof при чтении с файла
1
0 / 0 / 0
Регистрация: 12.10.2020
Сообщений: 30
08.01.2021, 18:31  [ТС] 9
Спасибо! Помогло! Я просто не соображаю как происходит чтение из файла
Вы файл сами формировали ?
Да, сама, исправила и теперь работает. Не ожидала, что проблема была в мною созданном файле
вообще не используйте eof при чтении с файла
Можете объяснить почему? Ведь это проверка прочитан ли файл до конца
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.01.2021, 18:44 10
Цитата Сообщение от Pincd Посмотреть сообщение
Можете объяснить почему?
потому что eof не предназначен для этого. если в дальнейшем не хотите получать ошибки, не используйте eof

поменяйте название потока на in
чтение:
C++
1
while (in.getline(line, 1000))
поток для записи назовите out
1
Just Do It!
4027 / 2421 / 640
Регистрация: 23.09.2014
Сообщений: 7,800
Записей в блоге: 2
09.01.2021, 09:41 11
Цитата Сообщение от Pincd Посмотреть сообщение
вот так:
abcd efgh abcd7 efgh7 ab88cd 11efgh 11abcd11 efgh11 ab8c8d 1efgh1
ага.
Цитата Сообщение от Pincd Посмотреть сообщение
записывает в другой файл строки, не содержащие двузначные числа
ключевое слово здесь есть строки.
т.е. в файле ваши строки были в одну строку?

ой как молодца
1
0 / 0 / 0
Регистрация: 12.10.2020
Сообщений: 30
09.01.2021, 13:49  [ТС] 12
ключевое слово здесь есть строки.
т.е. в файле ваши строки были в одну строку?

ой как молодца
говорю же, не понимаю как считываются данные с файла) я думала, что программе все равно как они записаны
ну во мне есть что-то от тупицы это да
0
09.01.2021, 13:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2021, 13:49
Помогаю со студенческими работами здесь

Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.
Помогите пожалуйста, получил от преподавателя задание на дом (болею), нужно сделать. Сам с файлами...

Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.
Есть задача,она работает,но не могу составить блок-схему к ней Помогите пожалуйста это сделать...

Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие...

Написать программу которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.
Задание : Написать программу, которая считывает текст из файла и выводит на экран только строки,...

Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа
вот начало кода,помогите пожалуйста работу надо сдать до 02.11,буду очень признателен using...


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

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