Войти

Показать полную графическую версию : Задачка не получается


Darkfall
12-08-2007, 21:04
Вот условие. Вывести только те предложения из текстового файла(файл содержит какие-то предложения), которые содержат данное слово. Если нужно могу выложить свои наработки. Спасибо заранее!

Mr.Q
18-08-2007, 22:59
Darkfall, я программированием только начал заниматься и еще не работал с этим языком, но все равно хочу предложить свой вариант решения:
поскольку текстовый файл является последовательным, то нам никакого труда не составит его читать абзац за абзацем в строку. Загрузив абзац в строку нам надо его преобработать..тут вариантов много, но на мой взгляд сначало надо проверить абзац на наличие того СЛОВА...если его нет, то читаем новый абзац, а если есть, то начинаем его обрабатывать...находим позицию слова в строке и позицию символа, означающего окончание предложения (".","!","?"...) если похиция символа меньше слова, то удаляем то предложение и так до того, пока позиция символа меньше позиции слова, то есть в цикле. Когда нашли нужное предложение, то выводим его досимвола, означающего окончание предложения (".","!","?"...) и удаляем выведенное....все это распиши по циклам (окончание одного это пустая строка, а другого окончание файла) и должно работать....
Надеюсь тебе помогу, а если будут какие-то вопросы, то напиши распишу более подробно.

bool
19-08-2007, 21:58
что то вроде:



#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <cstring>
using namespace std;

int main()
{

ofstream out("test", ios::binary);
char str[] = "bla bla bla bla . ble ble ble ble ble. blu blu blu blu. blo blo blo.";
out.write(str,strlen(str));
out.close();
ifstream in("test", ios::binary);
if(!in) {
cout << "File didn't open\n";
return 1;
}
char ch;
string word;
cout << "Input word: ";
cin >> word;
string s;
while(!in.eof()) {
in.get(ch);
if(ch=='.') {
if(s.find(word)!=-1) cout << s << endl;
else cout << "No 8(\n";
s.erase(0);
}
s=s+ch;
}
in.close();
return 0;
}

pva
31-08-2007, 08:18
Приукрашиваем код (используя наши знания STL ;) )

#include <iostream>
#include <string>

void doTheJob(istream& is, const string& word1)
{
if (is.rdbuf()) // чтобы потом не слететь обращением к нулевому адресу is.rdbuf()->sbumpc();
{
string expression;

while (getline(is, expression, '.')) // прочитали до точки
{
unsigned pos1 = expression.find(word1);

if (pos1!=-1 && // а есть ли слово внутри?
(pos1==0 || !isalpha(expression[pos1-1]) && // а в начале слова ли оно
(pos1 + word1.size()==expression.size() || !isalpha(expression[pos1 + word1.size()])) // а не в конце ли оно?
)
{
// нашли :-)
cout << "found: " << expression << endl;
}

is.rdbuf()->sbumpc(); // съели точку
}
}
}




© OSzone.net 2001-2012