|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Задачка не получается |
|
C/C++ - Задачка не получается
|
Новый участник Сообщения: 4 |
Профиль | Отправить PM | Цитировать Вот условие. Вывести только те предложения из текстового файла(файл содержит какие-то предложения), которые содержат данное слово. Если нужно могу выложить свои наработки. Спасибо заранее!
|
|
Отправлено: 21:04, 12-08-2007 |
Новый участник Сообщения: 13
|
Профиль | Отправить PM | Цитировать Darkfall, я программированием только начал заниматься и еще не работал с этим языком, но все равно хочу предложить свой вариант решения:
поскольку текстовый файл является последовательным, то нам никакого труда не составит его читать абзац за абзацем в строку. Загрузив абзац в строку нам надо его преобработать..тут вариантов много, но на мой взгляд сначало надо проверить абзац на наличие того СЛОВА...если его нет, то читаем новый абзац, а если есть, то начинаем его обрабатывать...находим позицию слова в строке и позицию символа, означающего окончание предложения (".","!","?"...) если похиция символа меньше слова, то удаляем то предложение и так до того, пока позиция символа меньше позиции слова, то есть в цикле. Когда нашли нужное предложение, то выводим его досимвола, означающего окончание предложения (".","!","?"...) и удаляем выведенное....все это распиши по циклам (окончание одного это пустая строка, а другого окончание файла) и должно работать.... Надеюсь тебе помогу, а если будут какие-то вопросы, то напиши распишу более подробно. |
------- Отправлено: 22:59, 18-08-2007 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 229
|
Профиль | Отправить PM | Цитировать что то вроде:
#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; } |
Отправлено: 21:58, 19-08-2007 | #3 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Приукрашиваем код (используя наши знания 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(); // съели точку } } } |
Отправлено: 08:18, 31-08-2007 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
MSFT SQL Server - Задачка | ValVlaGen | Программирование и базы данных | 6 | 27-08-2008 02:15 | |
Задачка по С++ | kiri | Программирование и базы данных | 1 | 21-06-2006 02:57 | |
Задачка | VuDZ | Программирование и базы данных | 4 | 02-04-2003 17:44 | |
Задачка | noname00.pas | Программирование и базы данных | 6 | 07-12-2001 11:43 | |
Задачка... | noname00.pas | Программирование и базы данных | 4 | 28-11-2001 03:17 |
|