Мне нужно создать файл txt, после чего написать программу, которая читает по строкам файла, подсчитывает кол-во повествовательных предложений и находит в файле 3 повествовательное предложение. Программа должна быть написана без векторов.За повествовательное мы берём предложение, которое кончается точкой. Учитывать троеточие не нужно. Найти в файле 3 предложение, это значит выделить его звёздочкой с двух сторон или slash'ами.
Например:
1 предложение.
2 предложение.
3 предложение?
/\4 предложение./\
Думаю, мое решение может помочь:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
string currentSentence = "";
char ch;
int sentenceCounter = 0;
ifstream infile("test.txt"); // your file
while(infile)
{
infile.get(ch);
/*
Если текущий символ - точка, то наше предложение утвердительное
Если счетчик меньше 2, значит увеличиваем счетчик и идем дальше
*/
if((ch == '.') &&(sentenceCounter < 2))
{
sentenceCounter++;
continue;
}
/*
Если мы уже встретили две точки в файле, то сейчас будет третье предложение.
Нужно учесть, что могут попадаться ! или ?.
Если они попадаются, то обнуляем строку и считываем файл дальше пока не дойдем до конца или до точки.
*/
if(sentenceCounter == 2)
{
if((ch != '!') && (ch != '?') && (ch != '.'))
{
currentSentence+=ch;
continue;
}
if(ch == '.')
{
cout<<currentSentence;
break;
}
//очищаем, если встретился восклицательный или вопросительный знак
if((ch == '!') || (ch == '?'))
{
currentSentence.erase();
continue;
}
}
currentSentence += ch;
}
return 0;
}
Правда здесь предложение не выделяется звездочками, оно выводится в консоль для простоты примера. Думаю, переписать для выделения предложения звездочками не будет трудно.
Тестировал на примере test1 . test2 ? test3 ! test4. test5? test6. test7?
, корректно выводит test6
.
Для таких знаков препинания как точка, восклицательный и вопросительный знак, все работает. Вам следует дописать программу для распознавания многоточия. И не забывайте про поддержку русских символов.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В функцию передаётся итератор и количество байт, которое необходимо скопировать в динамический массив к которому есть доступ через unique_ptrКак...
Пишу класс работающий с трафиком RS485 портаПри открытии порта я указываю функцию, вызываемую при наличии во входном буфере порта каких-то...
Так как это должно быть приложение, то там должна быть функция int main(){}Возможно, ее роль выполняет функция go