2 / 2 / 1
Регистрация: 05.04.2015
Сообщений: 2
1

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

03.05.2015, 20:21. Показов 9105. Ответов 1
Метки нет (Все метки)

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
39
40
41
42
43
44
#include <stdlib.h>
#include <iostream>
#include <fstream>
using namespace std;
int main () {
    setlocale (LC_ALL, "Russian");
    ifstream fin("eto.txt");
    if (!fin) {
        cout << "Файл не может быть открыт!" << endl;
        return 1;
    }
    else {
        fin.seekg(0, ios::end);
        long len = fin.tellg();
        char *buf = new char [len + 1];
        fin.seekg(0, ios::beg);
        fin.read(buf, len);
        buf[len] = '\0';
        long n = 0, i = 0, j = 0;
        char SLOVO[20]; // вводимое слово
        char str[1000]; // массив, в который по плану должны помещаться предложения с искомым словом
        
        cout << "Введи слово - ";
        cin >> SLOVO;
        cout << endl;
 
        while (buf[i]) {
            if (buf[i] == '.' || buf[i] == '?' || buf[i] == '!') {
                for (j = n; j <= i; j++) strcpy(str, buf);
                if (strstr(str, SLOVO) != NULL) 
                    for (j = n; j <=i; j++) 
                        cout << str[j];
                n = i + 1;
            }
            i++;
        }
    }
 
    fin.close();
    cout << endl << endl;
    
    system("pause");
    return 1;
}
прошу подредактировать/сделать задание без использования лишних "новороченных" функций, а использовать только то, что присутствует в коде (по возможности, конечно). ошибка я так понимаю скрыта внутри цикла while. вот ПРОБЛЕМЫ от мЕньших к бОльшим: 1) ищет только англ слова, 2) ищет не слова, набор букв, т. е. если в предложении "I am stupid" искать "tupi", то по идее не должно ничего выводить, но у меня все равно выведет это предложение. 3) выводит ВЕСЬ текст, если нужное слово, а точнее набор букв(см. проблему 2) присутствует в тексте.
P.S. Смотрел много таких же задач на ваших форумах, там везде исп-ся функции, которые я вижу в 1-й раз, к сожалению
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2015, 20:21
Ответы с готовыми решениями:

Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых
Начало уже есть, но что-то не тащит. Помогите пожалуйста... #include &lt;stdio.h&gt; #include...

Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых.
Здравствуйте. Прошу помощи в написание программу на C &quot;Написать программу, которая считывает текст...

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

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

1
2 / 2 / 1
Регистрация: 05.04.2015
Сообщений: 2
18.05.2015, 18:04  [ТС] 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
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
#include <iostream>
#include <fstream>
#include <iomanip>
#include <windows.h>
using namespace std;
int main() 
{
    setlocale(LC_ALL, "Russian");
    // обработка текста
    ifstream fin ("D:\\Папка с текстом\\eto.txt", ios::in); // поместите папку с текстовым файловым на лок диск D
    if (!fin)
    {
        cout << "Файл не может быть открыт!" << endl << endl;
    }
    else
    {
        fin.seekg(0, ios::end);
        long len = fin.tellg();
        char *str1 = new char [len + 1];
        fin.seekg(0, ios::beg);
        fin.read(str1, len);
        str1[len] = '\0';
 
        int k = 0, i = 0, j = 0;     // k - начало нового предложения, i - счетчик циклов, j - счетчик найденных слов
        char *token;
        char deliteli[] = ",.!?\|/<>)(*;:' ";
                             
        const int bukvy = 15;
        char slovo[bukvy];
 
        const int max = 10000;
        char predlojeniya[max], rezerv[max];
 
        
        cout << "Здравствуйте, Вы находитесь в программе, которая ищет в установленном текстовом файле предложения c введенным Вами словом.\n\nВведите искомое слово: ";
        cin >> setw(bukvy) >> slovo;
        OemToCharA (slovo, slovo);
        system("cls");
        cout << "Слово, введенное Вами: " << slovo << endl;
 
        
        // считаем кол-во точек/вопр/воскл в исходном тексте, ведь в тексте может вообще не быть предложений
        int n = 0;
        for (i = 0; i < strlen(str1); i++)
            if (str1[i]=='.' || str1[i] == '!' || str1[i] == '?') n++;
        if (n == 0) cout << endl << "Текст в файле вообще не содержит предложений" << endl << endl;
        
 
        // основная часть
        else
        {
            cout << endl << "Предложения с введенным Вами словом:" << endl;
            cout << "--------------------------------------------------------------------------------";
            for (i = 0; i < strlen(str1); i++)
            {
                if (str1[i]=='.' || str1[i] == '!' || str1[i] == '?') 
                {
                    strncpy(predlojeniya, str1+k, i-k+1);
                    predlojeniya[i-k+1] = '\0';
                    strcpy (rezerv, predlojeniya);           // функция strtok вычленяет токены, разделяемые любым из символов ",.!?\|/<>)(*;:' ",
                    token = strtok(predlojeniya, deliteli);  // из исходной строки (при этом разрушая ее!!!). Поэтому я сделал её дубликат (rezerv)
                    while (token != NULL)
                    {
                        if (!strcmp(token, slovo)) {cout << rezerv; j++;}
                        token = strtok(NULL, deliteli);
                    }
                    k = i + 1;
                }
            } 
 
            if (j == 0) cout << endl << "К сожалению, текст не содержит предложений со словом <" << slovo << ">" << endl;
            cout << endl <<  "--------------------------------------------------------------------------------" << endl;
        }
    }
 
    system("pause");
    return 1;
}
2
18.05.2015, 18:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2015, 18:04
Помогаю со студенческими работами здесь

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

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

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

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


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

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

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