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

Из fstream в cstdio

08.04.2015, 20:08. Показов 2758. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Стоит задача: Написать программу, которая считывает текст из файла и записывает в другой файл только те предложения, которые содержат введённое с клавиатуры слово.
Работа выполняется в двух вариантах:
1. С использованием библиотек потокового ввода-вывода (<fstream>).
2. С использованием библиотек стандартного ввода-вывода (<cstdio>)

С первым все хорошо.

C++ (Qt)
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
#include <iostream>
#include <locale>
#include <fstream>
#include <vector>
#include <string>
 
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    ifstream fin("test.txt");
    vector <string> vec;
    string word;    
    cout << "Введите искомое слово: " << endl;
    cin.ignore();
    getline(cin,word);
 
    if (!fin) cout << "Не могу открыть файл!" << endl;
 
    else
    {
        while (!fin.eof())
        {
            string tmp;
            getline(fin, tmp, '.');
            vec.push_back(tmp);
        }
    }
    string tmp;
    for (int i = 0; i < vec.size(); i++)
    {
        tmp = vec[i];
        size_t found = tmp.find(word);
        if (found != std::string::npos)
        {
            ofstream fout("cppstudio.txt", ios_base::app);
            fout << tmp;
            fout.close();
        }
    }
    system("pause");
    return 0;
}
Когда попробовал выполнить задание с помощью cstdio, вот тут возникла проблема:
C++ (Qt)
1
2
3
4
5
6
        while (!fin.eof())
        {
            string tmp;
            getline(fin, tmp, '.');
            vec.push_back(tmp);
        }
Как можно разбить текстовый файл на предложения, не используя getline? Или же, как его правильно использовать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.04.2015, 20:08
Ответы с готовыми решениями:

из cstdio в fstream
вод программа, написанная через функцию cstdio #include &quot;stdafx.h&quot; #include &lt;cstdio&gt; #include &lt;iostream&gt; #pragma...

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

cstdio vs fstream
Есть программа, виводящяя 16-ричный дамп бинарного файла (вместо каждого байта входного файла виводится значение в 16-ричной системе) Для...

3
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
08.04.2015, 23:19
Например, считать весь файл разом и использовать strtok() для разделения.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
09.04.2015, 07:52
Поскольку используются Сишные функции, то строки использовать нельзя
C++
1
2
3
4
5
6
7
 while (!fin.eof())
        {
            char tmp[100];
            fscanf(fin,"%s",tmp); // читаем по словам в char массив
            //fgets(tmp,100,fin);// читаем по строкам в char массив
            vec.push_back(string(tmp));
        }
0
0 / 0 / 0
Регистрация: 31.03.2015
Сообщений: 7
13.04.2015, 18:28  [ТС]
Если кому интересно, реализовал следующим образом:
C++ (Qt)
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
#define _CRT_SECURE_NO_WARNINGS
 
#include <iostream>
#include <locale>
#include <cstdio>
#include <vector>
#include <string>
#include <string.h>
 
using namespace std;
 
int find_word(char* tmp, char* word)
{
    bool flag = false;
    int len_tmp = strlen(tmp);
    int len_word = strlen(word);
 
    for (int i = 0; i < len_tmp; i++)
    {
        if (tmp[i] == word[0])
        {
            int l = 0;
            for (int j = 0; j < len_word; j++)
            if (tmp[i + j] == word[j]) l++;
 
            if (l == len_word)
            {
                flag = true;
                break;
            }
        }
    }
 
    if (flag == true) return 0;
    else return -1;
 
}
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    FILE* fin = fopen("test.txt", "r"),
        * fout = fopen("test1.txt", "a");
    fseek(fin, 0, SEEK_END);
    long size = ftell(fin);
    fseek(fin, 0, SEEK_SET);
    char * tmp = new char[size];
 
    char * word = new char[10];
    cout << "Введите искомое слово: " << endl;
    cin.sync();
    cin.getline(word, 10);
    if (size == 0) cout << "Файл пустой!" << endl;
 
    if (!fin) cout << "Не могу открыть файл!" << endl;
 
    else
    {
        int i = 0;
        char ch;
        do
        {
            ch = fgetc(fin);
 
            if (ch != '.')
            {
                tmp[i] = ch;
            }
            else
            {
                tmp[i] = ch;
                tmp[i + 1] = '\0';
                if (find_word(tmp, word) == 0)
                {
                    fputs(tmp, fout);
                    i = -1;
                }
                else i = -1;
 
            }
            if (ch == '\n') i = -1;
            if (ch == EOF)
            {
                tmp[i] = '\0';
                if (find_word(tmp, word) == 0) fputs(tmp, fout);
            }
 
 
            i++;
        } while (ch != EOF);
 
        
    }
    fseek(fout, 0, SEEK_END);
    long size1 = ftell(fout);
    fseek(fout, 0, SEEK_SET);
    if (size1==0)cout << "Искомое слово в файле не встретилось." << endl;
    else cout << "Предложения записанны в файл." << endl;
    system("pause");
    return 0;
}
Может кому-нибудь поможет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.04.2015, 18:28
Помогаю со студенческими работами здесь

Что за ошибка с использованием cstdio?
Вот код: #include &lt;cstdio&gt; #include &lt;clocale&gt; using namespace std; int main() { setlocale(LC_ALL,&quot;Russian&quot;); double...

Почему работает puts() из <cstdio> ?
Всем привет! Вы можете сказать, что мне нечего делать, но я спрошу :) Элементарный ХеллоуВорлд #include &lt;cstdio&gt; int main() ...

<cstdio> выдает 299 ошибок
По совету с форума начал изучать C++ по книге &quot;Герберт Шилдт - Самоучитель C++&quot;. При выполнении одного из уроков visual studio выдает...

Работа с файлом без использования библиотеки cstdio
Добрый день! Было дано задание: создать файл и работать с ним без использования библиотеки cstdio. Если есть какие-то идеи, прошу...

fstream и for
Здрасте. Собственно, не могу понять, по какой причине не работает вот такой вот код, хотя по идее должен работать, или я ошибаюсь? ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru