Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Задачка не получается (http://forum.oszone.net/showthread.php?t=88510)

Darkfall 12-08-2007 21:04 626673

Задачка не получается
 
Вот условие. Вывести только те предложения из текстового файла(файл содержит какие-то предложения), которые содержат данное слово. Если нужно могу выложить свои наработки. Спасибо заранее!

Mr.Q 18-08-2007 22:59 629597

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

bool 19-08-2007 21:58 629875

что то вроде:
Код:



#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 636109

Приукрашиваем код (используя наши знания 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();  // съели точку
  }
  }
}



Время: 17:51.

Время: 17:51.
© OSzone.net 2001-