Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
DVIMX
0 / 0 / 0
Регистрация: 31.03.2015
Сообщений: 7
#1

Из fstream в cstdio

08.04.2015, 20:08. Просмотров 676. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2015, 20:08
Ответы с готовыми решениями:

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

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

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

Почему работает puts() из <cstdio> ?
Всем привет! Вы можете сказать, что мне нечего делать, но я спрошу :)...

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

3
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
08.04.2015, 23:19 #2
Например, считать весь файл разом и использовать strtok() для разделения.
0
zss
Модератор
Эксперт С++
7097 / 6628 / 4196
Регистрация: 18.12.2011
Сообщений: 17,474
Завершенные тесты: 1
09.04.2015, 07:52 #3
Поскольку используются Сишные функции, то строки использовать нельзя
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
DVIMX
0 / 0 / 0
Регистрация: 31.03.2015
Сообщений: 7
13.04.2015, 18:28  [ТС] #4
Если кому интересно, реализовал следующим образом:
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2015, 18:28

Что за ошибка с использованием cstdio?
Вот код: #include &lt;cstdio&gt; #include &lt;clocale&gt; using namespace std; int...

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

fstream
помогите, пожалуйста, чет я совсем запуталась((( /*Дан текстовый фал,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru