Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Russel
#1

Удалить из текста каждое четное предложение. - C++

26.05.2009, 21:31. Просмотров 1378. Ответов 9
Метки нет (Все метки)

Товарищи, вобщем прошу вас помоч со следующей задачей: Нужно удалить из текста, находящегося в файле, каждое четное предложение.
Прощу посоветовать с чего вообще начать, какойнить алгоритм, а то у меня нет никаких мыслей как это сделать...
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2009, 21:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить из текста каждое четное предложение. (C++):

Удалить из текста, находящегося в файле, каждое четное предложение - C++
Help

Удалить из текста, находящегося в файле, каждое четное предложение - C++
Написать прогу. Удалить из текста, находящегося в файле, каждое четное предложение на СИ

Удалить из текста, находящегося в файле, каждое четное предложение. - C++
Удалить из текста, находящегося в файле, каждое четное предложение.

Удалить из текста, находящегося в файле, каждое четное предложение. - C++
Удалить из текста, находящегося в файле, каждое четное предложение.

Удалить из текста, находящегося в файле, каждое четное предложение - C++
Не могу разобраться объясните как прописать путь к txt Добавлено через 9 минут спасибо уже сделал

Удалить из текста, находящегося в файле, каждое четное предложение - C++
Задание: Удалить из текста, находящегося в файле, каждое четное предложение Программа дожна быть на языке Cи. Добавлено через...

9
RetiF
8 / 8 / 1
Регистрация: 21.12.2008
Сообщений: 36
27.05.2009, 02:56 #2
Открываете файл, идёте по нему до конца по символам "\n" (конец строки). После каждого нечётного будет идти, соответственно, чётная строка, вместо которой нужно напечатать пустую

C++
1
2
3
4
5
6
7
8
char symbol;
FILE *text;
text = fopen("textfile.txt","a+");
while(!feof(text)) 
 {
  fscanf(text,"%c",&symbol);
  if(symbol=='\n') /*и далее продолжайте*/
 }
Само-собой, файл с исходным текстом уже должен существовать
0
Ёрик
46 / 46 / 2
Регистрация: 07.01.2009
Сообщений: 298
27.05.2009, 07:44 #3
RetiF, Вообще,может, я задание не понимаю,но нужно удалить каждое четное ПРЕДЛОЖЕНИЕ,а не строку(предложение может быть разбито newline и tab по всему файлу). Поэтому нужно искать символ точки в файле. И завести переменную ,которая будет хранить,предложение четное или нет(если мы нечетное кол-во раз встретили точку,то это нечетное предложение и т.д.).Каждый раз нужно запоминать позицию начала предложения в файле(когда нашли точку,то полсе нее проверяем какой символ находится,пробел ли это?tab ли это? newline ли это?Если да, то запоминаем начало предложения. Потом когда нашли точку,это будет конец предложения(тоже запоминаем). Из переменной,где хранится адрес конца предложения вычитаем адрес начала предложения,получится, сколько предложение занимает байт. Затем,если это нечетный символ точки, то запускаем алгоритм заново,пока не конец файла(это условие нужно в начале),а если четный,то удаляем побайтно предложение. В голове один ассемблер,поэтому не знаю, получится ли алгоритм на С... Хотя побайтно читаем,значит,получится и удалить
0
Evg
Эксперт CАвтор FAQ
18261 / 6386 / 440
Регистрация: 30.03.2009
Сообщений: 17,670
Записей в блоге: 28
27.05.2009, 10:59 #4
Условно говоря принцип работы такой

открываем второй файл на запись
bool flag = false;
Читаем побайтно из файла. На каждый байт выполняем код:
{
- если flag == true, то байт записываем в результирующий файл
- если считанный байт - точка, вопросительный знак или восклицательный знак - то инвертируем flag
}
закрываем оба файла и переименовываем второй файл в первый

Вариант, что в конце предложения стоИт многоточие я не рассматривал, ибо это усложнит алгоритм, а для преподавателя, думаю, вариант с многоточием не нужен
0
Russel
29.05.2009, 15:07 #5
Evg спасибо, думаю это как раз то что нужно... Щас попробую составить программу, завтра уже сдать надо)))
MrAndrey_ka
78 / 78 / 2
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
29.05.2009, 15:16 #6
Цитата Сообщение от Evg Посмотреть сообщение
Условно говоря принцип работы такой

открываем второй файл на запись
bool flag = false;
Читаем побайтно из файла. На каждый байт выполняем код:
{
- если flag == true, то байт записываем в результирующий файл
- если считанный байт - точка, вопросительный знак или восклицательный знак - то инвертируем flag
}
закрываем оба файла и переименовываем второй файл в первый

Вариант, что в конце предложения стоИт многоточие я не рассматривал, ибо это усложнит алгоритм, а для преподавателя, думаю, вариант с многоточием не нужен
я думаю быстрее будет прочесть весь файл в строку а затем искать там: точка, вопросительный знак или восклицательный знак и записовать в другой файл или удплять в зависимомти от четности. А еще перед записью можно поудалять символы конца строки, чтобы красивее выходной файл получился!
0
Gravity
564 / 558 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
29.05.2009, 15:20 #7
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
я думаю быстрее будет прочесть весь файл в строку а затем искать там
А если размер файла окажется на десятки мегабайт?
0
Evg
Эксперт CАвтор FAQ
18261 / 6386 / 440
Регистрация: 30.03.2009
Сообщений: 17,670
Записей в блоге: 28
29.05.2009, 15:27 #8
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
я думаю быстрее будет прочесть весь файл в строку а затем искать там:
Человек пишет задание для института, а не программный продукт для пользователей. Если в строку - надо вычислить размер файла, потом выделить буффер, потом загнать туда весь файл. В конце буффер освободить. Получается, что воспомогательных действий больше, чем полезных.

Вообще, вся работа через промежуточный буффер имеет смысл лишь тогда, когда нужно после чтения что-то анализировать, причём в обратном порядке. Если всё делается в прямом порядке на проходе - тона мой взгляд в большинстве случаев можно тупо читать побайтно. С точки зрения скокрости исполнения - львиная доля времени работы программы занимает непосредственное обращение к файлу, а потому экономии на скоркости работы программы ты не получишь - грубо говоря, исполнится программа за 100 секунд или за 101 секунду - гемор ради этого разводить не стОит

Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
А еще перед записью можно поудалять символы конца строки, чтобы красивее выходной файл получился!
Это всё делается на проходе. Внутри фигурных скобок моего условного кода мы по большому счёту заменяем энтер на пробел. Можно запоминать предыдущий напечатанный символ и таким образом несколько пробелов заменять на один. В том месте, где инфертируется флаг рисовать энтер - тогда каждое предложение будет на отдельной строке. Т.е. однопроходный вариант без буффеора он технически проще реализуется и нагляднее выглядит. А замена пачки пробелов на один в промежуточном буффере, уделение энтеров - это по большому счёту куча запусков копирования блоков, по которым начнётся извраты с вычислением размера, отслеживаением завершающего нуля, куча вычитаний или прибавлений единицы - в общем код перестаёт быть легко понимаемым
0
MrAndrey_ka
78 / 78 / 2
Регистрация: 13.05.2009
Сообщений: 537
Записей в блоге: 1
29.05.2009, 15:32 #9
ладно, ладно пускай будет так!
дело в том что побайтовое чтение с файла намного медленнее чем блоковое, и если файл 10 мегабайт(а то и 100), то это может затянутся на долго!
0
Evg
Эксперт CАвтор FAQ
18261 / 6386 / 440
Регистрация: 30.03.2009
Сообщений: 17,670
Записей в блоге: 28
29.05.2009, 16:09 #10
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
ладно, ладно пускай будет так!
дело в том что побайтовое чтение с файла намного медленнее чем блоковое, и если файл 10 мегабайт(а то и 100), то это может затянутся на долго!
Нет. При вызове fgetc реально читается из файла целый блок, а дальнейшие вызовы fgetc читают из буффера. Потом по зваершении блока опять читается новый. На том же самом принципе устроены и fread'ы - все эти высокоуровневые фукнкции "внизу" работают через один и тот же буффер
1
29.05.2009, 16:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2009, 16:09
Привет! Вот еще темы с ответами:

В тексте удалить каждое четное слово, продублировать каждое нечетное слово - C++
Не могу решить данную задачу, много чего перечитал, за помощь буду благодарен В тексте удалить каждое четное слово, продублировать...

В тексте удалить каждое четное слово, продублировать каждое нечетное слово - C++
Не могу решить данную задачу, много чего перечитал, за помощь буду благодарен" "В тексте удалить каждое четное слово, продублировать...

Удалить каждое четное слово из строки - C++
Удалить каждое четное слово из строки. Есть такое начало: #include <iostream> #include <cstdio> using namespace std; const int...

Удалить каждое четное слово из строки - C++
Задача: Удалить каждое четное слово из строки. Это то что надо получить в конце, но т.к. я пытаюсь разобраться, хотелось бы по подробнее...


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

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

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