Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2009, 14:48   #1
Evolver
Новичок
Джуниор
 
Регистрация: 24.04.2009
Сообщений: 2
По умолчанию Скоросто поиска строки в файле

Всем привет!
Меня интересует такой вопрос. У меня есть прога, которая ищет количество вхождений искомого тескта в текстовом файле. Можно как-нибудь ускорить поиск в программке? Может принцип другой нужно использовать?

Вот листинг. Приложение консольное, но это не особо имеет значения.

Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;

int main ()
{
/************************* ПЕРЕМЕННЫЕ **************************************************/
	int Pos=0;			// Позиция символа (см.дальше)
	int Result=0;		// Счетчик результата поиска
	int LengthFind=0;	// Длинна строки (см. дальше)
	string TempStr="";	// Временная строка
	string Key="";		// Искомая строка
	string Str="";		// "Целая" строка
	string AnyErr="";	// Используется только при задержках
	size_t Found;		// Номер позиции в строке, того что мы ищем
	char FileName[40];	// Имя файла
	char CharBuf[200];	// Буффер для строки

/************************* ВВОДИМЫЕ ЗНАЧЕНИЯ ******************************************/
	cout << "Enter file name: ";
	cin >> FileName;				// Вводим имя файла
	cout << endl;
	cout << "\t" << "Enter find text: ";
	cin >> Key;								// Вводим то, что ищем

/******************** ПОЛУЧЕНИЕ СТРОКИ ИЗ ФАЙЛА ***************************************/	
	ifstream InputFile(FileName);	// Открываем файл
	while (! InputFile.eof())		// Читаем строки пока не закончился файл
		{
		if (InputFile.fail())		// Если файл не открыватся, тогда ошибка
			{
			cout << endl << endl;
			cerr << "*********** Error open file ***********" << endl;
			cout << endl;
			cout << "Enter any symbol and press ENTER";
			cin >> AnyErr;		// Для задержки результата
			exit(1);
			}
		else

		InputFile.getline (CharBuf, sizeof(CharBuf));	// Получаем символы
		Str = CharBuf;									// Запихиваем символы в строку

/************************* ПОИСК ******************************************************/
		LengthFind = Key.length();	// Длинна строки которую ищем
				
		do
			{
			Found=Str.find(Key);	// Ищем искомую строку в "целой" строке
			(Found!=string::npos);	// Если found не равен 4294967295 значит чего-то нашли
			
				if (Found<201)		//...иначе стоп-цикл
					{
					Result++;				// Плюс к счетчику
					Pos = Str.find(Key);	// Позиция символа искомой строки с начала "целой" строки
					TempStr = Str.substr(Pos+LengthFind);	// Отрезаем кусок "целой" строки с начала,
															//...плюс длинна искомой строки
					Str=TempStr;			// Приравнивает полученную строку к "целой" строке
					}
				else break;
			}
		while (Found<201);
		};
/************************** ВЫВОД РЕЗУЛЬТАТОВ *****************************************/
	cout << endl;
	cout << " ******************* RESULT ******************* ";
	cout << "<" << Key << ">" << " - find: " << Result;	//Выводим счетчик
	cout << endl << endl;
	cout << "Enter any symbol and press ENTER";
	cin >> AnyErr;		// Для задержки результата

	return 0;
};

Последний раз редактировалось MaTBeu; 24.04.2009 в 22:48.
Evolver вне форума Ответить с цитированием
Старый 24.04.2009, 22:48   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Упорядочить текст и использовать бинарный поиск.
MaTBeu вне форума Ответить с цитированием
Старый 25.04.2009, 10:44   #3
Evolver
Новичок
Джуниор
 
Регистрация: 24.04.2009
Сообщений: 2
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
Упорядочить текст и использовать бинарный поиск.
А можно поконкретнее? Я программист начинающий, поэтому вопрос может и звучит глупо, но все же.
Да и зачем упорядочивать текст, если на это тоже время уйдет??? Изначально, это просто файл в котором нужно найти количество вхождений. Файл я получаю, а не формирую и мне в нем нужно искать.

P.S. Спасибо, за ответ.
Evolver вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск строки в файле по шаблону andru15 Общие вопросы C/C++ 1 16.02.2009 18:44
Помощь поиска в файле asale Microsoft Office Excel 10 09.12.2008 17:13
Поиск строки в файле Gwynbleidd Общие вопросы C/C++ 1 08.10.2008 01:45
Алгоритм поиска HEX строки в файле Vlad_3310 Общие вопросы Delphi 8 17.06.2008 10:02
Строки в файле werser Общие вопросы Delphi 1 24.05.2008 21:22