Работа с файлами. Выделение предложения

165
28 марта 2018, 05:41

Всем здравствуйте. С помощью текстового редактора Блокнот создать файл. Написать программу, которая выводит содержимое файла на экран. Выделение фрагмента в тексте выделить произвольными символами (звездочками, слэшем и т.п) Задание: Определить количество повествовательных предложений в тексте; по нажатию произвольной клавиши выделить третье повествовательное предложение. Все пункты выполнил, кроме выделения 3 повествовательного. Пытаясь додуматься, как сделать так, чтобы программа записывала определенное предложения в переменную, сломал себе голову, так что очень надеюсь на помощь) Ниже сама программа.

#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
setlocale (0,"rus");
FILE *f;
char pre[2] = ".";
int pred=0, b;
char ch;
f = fopen("File.txt","r");
while(!feof(f)){
    fscanf(f, "%c", &ch);
    cout<<ch;
}
if ((f = fopen("File.txt","r"))== NULL)
{
    printf("Невозможно открыть файл.\n");
    return 0;
}
while (!feof(f))
{   
    ch = fgetc(f);
    for (int i=0;i<3;i++)
    if (ch == pre[i])
    {       
        pred++;
        break;
    }
}
fseek(f,0,SEEK_SET);
printf("\nКоличество повествовательных предложений : %i",pred);
fclose(f);
return 0;
}
Answer 1

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

vector<string> offers;
    string s;
    // пусть вы отмечали звездочкой повествовательные предложения
    char c = '*';
    // читаем все предложения из файла и  отмеченные добавляем в вектор
    while (getline(f, s, '.')) {
        // тут я не знаю , на каком месте вы отметили звездочкой предложение         
        if(s.find(c) != string::npos)
            offers.emplace_back(s);
    }
    cout << "Количество повествовательных предложений:\n" <<  offers.size() << endl;
    getchar(); // вводим любой символ и получаем  ответ на второй вопрос
    cout  <<"третье повествовательное предложение:\n" << offers[2];

Может я не правильно понел условие задачи, но это уже детали, не мешающие тому, как нужно подойти к решению задачи...

READ ALSO
Что происходит при истечении SO_KEEPALIVE?

Что происходит при истечении SO_KEEPALIVE?

Что происходит c TCP-соединением при истечении таймаута SO_KEEPALIVE?

140
Освобождение памяти vector C++

Освобождение памяти vector C++

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

137
Запуск onboard вместе с приложением

Запуск onboard вместе с приложением

Можно ли вставить system("onboard"); в приложение Qt при его запуски от root?

128