0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 11
1

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

16.04.2018, 14:58. Показов 1598. Ответов 7
Метки нет (Все метки)

Здравствуйте.Если у кого-то будет свободная минутка помогите пожалуйста. Было дано задание "Написать программу, которая считывает текст из файла и выводит на экран только предложения, содержащие введенное с клавиатуры слово".
У меня программа на руках однако немного неправильно сделаная
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
#include "stdafx.h"
#include <iostream> 
#include <fstream> 
 
 
 
using namespace std;
 
int main() {
 
    setlocale(LC_ALL, "Russian"); // вывод русского языка 
 
    const int len = 101; //длина строки 
 
    char word[len], line[len];
 
    cout << "Введите слово для поиска: ";
 
    cin >> word;
 
    int l_word = strlen(word); // длина искомого слова 
 
    ifstream fin("in.txt"); // поток чтения из файла 
 
    if (!fin) {
 
        cout << "Ошибка открытия файла!";
 
        system("pause");
 
        return 1;
 
    }
 
    while (fin.getline(line, len)) { // считывание из файла строк 
 
        if (strstr(line, word))
 
            cout << line << endl; //  вывод подстроки найденным  словом  
 
 
 
    }
 
    system("pause");
 
}
Однако в конце как видно (в самом конце) выводит строку содержащую слово,а нужно что бы выводило на экран только предложения, содержащие введенное с клавиатуры слово.
Вопрос:что нужно поменять ? Заранее спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2018, 14:58
Ответы с готовыми решениями:

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

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

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

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

7
2477 / 1904 / 951
Регистрация: 21.12.2010
Сообщений: 3,473
Записей в блоге: 10
16.04.2018, 22:31 2
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
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <regex>
#include <fstream>
#include <cstdlib>
 
 
int main()
{
    system("chcp 1251");
    std::ifstream ifs("in.txt");
    if (ifs.is_open())
    {
        std::string str{std::istreambuf_iterator<char>{ifs.rdbuf()}, {}};
        std::string sw("слово"); // слово
        std::regex reg{"(?:^|[!?.])((?:[^!?.]*?[^!?.а-яА-ЯёЁ[:alnum:]])?" + sw + "(?:[^!?.а-яА-ЯёЁ[:alnum:]][^!?.]*?)?)(?=([!?.]))"};
        for (std::sregex_iterator ib{ str.begin(), str.end(), reg}, ie; ib != ie; ++ib)
        {
            std::cout << ib->str(1) << ib->str(2) << std::endl;
        }
 
        ifs.close();
    }
    else
    {
        std::cerr << "Unable to open file\n";
    }
}
0
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 11
16.04.2018, 23:15  [ТС] 3
Благодарю что вы вообще ответили но при запуске выдает ошибку
Ошибка 1 error C2440: инициализация: невозможно преобразовать "initializer-list" в "std::basic_string<char,std::char_traits<char>,std ::allocator<char>>"

Добавлено через 6 минут
igorrr37, Благодарю что вы вообще ответили однако при запуске выдает ошибку
Ошибка 1 error C2440: инициализация: невозможно преобразовать "initializer-list" в "std::basic_string<char,std::char_traits<char>,std ::allocator<char>>"
0
2477 / 1904 / 951
Регистрация: 21.12.2010
Сообщений: 3,473
Записей в блоге: 10
16.04.2018, 23:20 4
а если так (строка 16)
C++
1
std::string str(std::istreambuf_iterator<char>(ifs.rdbuf()), {});
0
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 11
16.04.2018, 23:28  [ТС] 5
igorrr37, к сожалению опять то же самое Ошибка 1 error C2664: "std::basic_string<char,std::char_traits<char>,std ::allocator<char>>::basic_string(std::initializer_ list<_Elem>,const std::allocator<char> &)": невозможно преобразовать аргумент 1 из "std::istreambuf_iterator<char,std::char_traits<ch ar>>" в "const std::basic_string<char,std::char_traits<char>,std: :allocator<char>> &"
0
2477 / 1904 / 951
Регистрация: 21.12.2010
Сообщений: 3,473
Записей в блоге: 10
16.04.2018, 23:39 6
C++
1
std::string str( std::istreambuf_iterator<char>(ifs.rdbuf()), std::istreambuf_iterator<char>() );
0
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 11
17.04.2018, 00:24  [ТС] 7
igorrr37, еще раз спасибо. Не знаю на сколько у вас хватит на меня терпения. В общем есть прогресс никаких ошибок вот только после отладки программа сразу же закрывается и помещенный в директорию с проектом текстовый файл не меняет результат. Только сейчас заметил- я неправильно выразился когда составлял тему-до меня докопались сказав что программа выводит строки,а должна выводить предложения .
0
1500 / 964 / 811
Регистрация: 30.04.2016
Сообщений: 3,334
09.05.2018, 20:28 8
Nikk0, здравствуйте! Вот ссылка: Считывание текста из файла и вывод на экран только предложения содержащие введенное с клавиатуры слово По этой ссылке пост #7. Я проверял, код несложный и рабочий.

Добавлено через 2 часа 7 минут
Nikk0, в итоге сам решил написать такую программу. Проверял на Ф. М. Достоевском, - получилось довольно точно. Вот код:

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
#include <bits/stdc++.h> 
#include <windows.h>
 
    using namespace std;
 
int main() {
 
    setlocale(LC_ALL, "Russian"); //Чтобы функция isalpha() работала с русским текстом.
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    set<string> set;
    string str, word;
    char ch;
    int pos, xleft, xright, count;
    cout << "Enter a word: ";
    cin >> word;
    while (fin.get(ch)) {
        str += ch;
    }
    str = ". " + str;
    for (int i = 0; i < str.size(); i++) {
        if (str.substr(i, word.size()) == word) {
            if ((!isalpha((unsigned char)str[i-1])) && (!isalpha((unsigned char)str[i + word.size()]))) {
                pos = i;
                for (int i = pos; i >= 0; i--) {
                    if (str[i] == '.' || str[i] == '!' || str[i] == '?') {
                        xleft = i;
                        break;
                    }
                }
                for (int j = pos; j < str.size(); j++) {
                    if (str[j] == '.' || str[j] == '!' || str[j] == '?') {
                        xright = j;
                        break;
                    }
                }
                set.insert(str.substr(xleft + 2, xright - xleft - 1));
            }
        }
    }
    count = 0;
    for (auto it = set.begin(); it != set.end(); ++it) {
        count++;
        fout << count << " => " << *it << "\n\n";
    }
    if (!count) fout << "No words found in the text!\n";
    fin.close();
    fout.close();
    system("pause");
    return 0;
}
P.S. В данной программе, не важно русский текст или нет, предложения при выводе отсортированы по алфавиту. Если нужно сохранить порядок их следования в тексте, пишите, это легко переделать.

Добавлено через 3 часа 34 минуты
Nikk0, вот более короткий, переработанный вариант программы:

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 <bits/stdc++.h> 
#include <windows.h>
 
    using namespace std;
 
int main() {
    setlocale(LC_ALL, "Russian"); //Чтобы функция isalpha() работала с русским текстом. 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    int pos, count;
    string str, word;
    char ch;
    cout << "Enter a word: ";
    cin >> word;
    if (fin) {
        fin.unsetf(ios::skipws);
        pos = count = 0;
        while (fin >> ch) {
            str += ch;
            if (ch == '.' || ch == '!' || ch == '?') {
                pos = str.find(word);
                if (string::npos != pos && !isalpha((unsigned char)str[pos-1]) && !isalpha((unsigned char)str[pos + word.length()])) {
                    count++;
                    fout << count << " => " << str << "\n\n";
                }
                str.clear();
            }
        }
    } else
        cerr << "No file found with such a name!\n";
    if (!count) fout << "No words found in the text!\n";
    fin.close();
    fout.close();
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2018, 20:28
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru