73 / 73 / 1
Регистрация: 02.08.2008
Сообщений: 107
|
||||||
1 | ||||||
Строки02.08.2008, 15:08. Показов 4842. Ответов 24
Метки нет (Все метки)
Приветствую Вас, братья и сёстры. У меня возникла проблемка с простой задачкой из книжки госпожи Павловской. Вот она: написать программу, которая считывает текст из файла и выводит на экран только предложения, содержащие введённое с клавиатуры слово.
У меня было два варианта решения этой задачи, но после быстрого вымирания моих нервных клеток, первый вариант я отбросил, а вот пример второго:
Добавлено через 1 час 10 минут я нашёл, где может быть глюк (у меня): fin.read(buf, len); наверно после этого указатель становится в самом конце файла, но даже если после этой строки я напишу fin.seekg(0, ios::beg); ничего не меняется...
0
|
02.08.2008, 15:08 | |
Ответы с готовыми решениями:
24
Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки Добавить строки, начиная со строки К1 и до строки К2, в динамический массив строк Удалить строки динамической матрицы, начиная со строки К1 и до строки К2 Удалить строки, начиная со строки К1 и до строки К2 (динамические массивы) |
73 / 73 / 1
Регистрация: 02.08.2008
Сообщений: 107
|
||||||
02.08.2008, 20:08 [ТС] | 21 | |||||
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
02.08.2008, 21:44 | 22 |
Уф. Вообщем я подебажил немного эту прогу.
Когда ты вызваешь read он читает и доходит до конца. Таким образом мы получаем установленный бит eof. Отсюда, мы получаем true на fail(). В либах С++ при вызове seekg проверяется fail(). И если она возвращает true, то сбрасываются все флаги ошибок через вызов clear и возвращается в главную прогу. Если вызвать сторой раз seekg, то fail() вернет false (мы же clear() вызвали прошлый раз.) и пойдет процесс смены позиции, поэтому второй вызов сработает. Итак, несколько вариантов: 1) два раза вызвать seekg: Код
fin.seekg(0, ios::beg); fin.seekg(0, ios::beg); 2) вручную вызвать снятие флагов: Код
if (fin.fail()) { fin.clear(); } fin.seekg(0, ios::beg); Код
if (fin.eof()) { fin.clear(); } fin.seekg(0, ios::beg);
0
|
73 / 73 / 1
Регистрация: 02.08.2008
Сообщений: 107
|
|
03.08.2008, 00:10 [ТС] | 23 |
Сам бы я на врядли смог, ибо про clear я мало что знаю и даже сейчас ничего толком не смог найти. Схожу в книжный и куплю справочник, где будут расписаны функции, классы и тому подобное, ибо в моей книженции только то...что почти и не надо, как оказалось.
Гм....аллилуя, брат мой, СЛАВЯНИН, ЗЕМЛЯНИН, такой же сын адама и евы. 3 способ работает (1-ый нет, второй не смотрел). кикин моо факин эсс, как говорит мой знакомый. Спасибо тебе огромное. Пфф, если бы я пил, то пощёл бы нажрался, ибо меня это уже начало доставать... Добавлено через 6 минут и тогда ещё вопрос: после этого while (fin.getline(line, 10000)) { if (strstr(line,word)) где он устанавливает указатель?
0
|
73 / 73 / 1
Регистрация: 02.08.2008
Сообщений: 107
|
|
03.08.2008, 00:20 [ТС] | 25 |
это было второе задание из 20 5-ого семинара, а их будет штук 20, так что айл би бэк
0
|
03.08.2008, 00:20 | |
03.08.2008, 00:20 | |
Помогаю со студенческими работами здесь
25
Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка содер-жится в ней Переписать все строки файла удаляя пробелы в конце каждой строки Как первые два символа строки переставить в конец этой строки? Как считать строки из файла, если там больше одной строки? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |