Форум программистов, компьютерный форум CyberForum.ru

Поиск строк - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не могу сделать exe http://www.cyberforum.ru/cpp-beginners/thread2756.html
При компиляций моего пректа exe не создаётся.Выдаёт ошибки,которые я не знаю как исправить...http://dump.ru/files/g/g2067785368/ Программа должна выполнять функцию Надо ввести значение переменной pr с помощью клавиатуры.А другая переменная f определяется случайным значением В конце программы выдает текст типа "Переменная pr равна(значение,заданное вами) и f равна(случайное значение).Помогите...
C++ Где можно скачать программу, чтобы начать учиться работать в С++? собственно ногами не пинать...вопрос полного нуля в этой области , но подскажите где можно скачать программу для того что бы начать учиться работать в С++... может выразился сумбурно...но за рание спасибо:) http://www.cyberforum.ru/cpp-beginners/thread2737.html
Где можно скачать элекронные книги, конспекты и тд? C++
Уважаеммые формчане, нужна помощь по основам программирования на С, ищу ссылки где можно скачать элекронные книги, конспекты и тд и тп. ничего сложного и желательно кратко. заренее благодарен
Помогите с курсовой на тему! C++
Отражение движущегося случайным образом шарика от геометрических фигур статично располагающихся в комнате (треугольник, квадрат, круг) с использованием библиотеки функций OPENGL.
C++ Оптимизация кода http://www.cyberforum.ru/cpp-beginners/thread2633.html
Положение дел таково: написана программа, которая работает и вроде все замечательно, но, вспоминая программирование, которому обучался в институте курсе где-то на втором, понимаю, что программа изобилует(?) глобальными переменными (21 переменных всего, из них 12 целые числа, 7 булевы, 2 структуры времени). Вроде как это не очень хорошо, но вот чем это плохо? Стоит ли мучать голову подобным...
C++ Подскажите новичку Приветствую! Я в программировании новичок, возникают вопросы даже на «первых ступенях»... Собственно, у меня такой вопрос, почему при таком условии if (n1,n2 < 10) программа считывает только значение n2 и если ввести значение n1, ну скажем 30, то условие все равно будет считаться «истинным»? Я пробовал и так, но все равно результат тотже: if (n1 && n2 < 10) Есть какие-либо способы? Или есть... подробнее

Показать сообщение отдельно
Андрeй
Сообщений: n/a

Поиск строк - C++

23.08.2007, 12:06. Просмотров 2832. Ответов 1
Метки (Все метки)

Здраствуйте, подскажите какие есть реализации или как это сделать примерно. Задача в поиске строк в файле, можно воспользоватся регулярными выражениями или алгоритмами типа бойра-Мура, но файл нельзя считать полностью, как првило, поэтому нужна адаптированная реализация которая может получать строку для поиска по частям.

Вот что с сделал с БМ, недостаток в том, что если искомая строка входит в буфер(BufferRead) не целиком, тогда она оказывается не найденой программой.

Как можно дописать это?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using namespace std;
#include <stdio.h>     /* для printf */
#include <stdlib.h>    /* для exit */
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include<string.h>
#include<fcntl.h>
#define MAX(a,b) (((a)>(b))?(a):(b))
#define MIN(a,b) (((a)<(b))?(a):(b))
int ASIZE=255,XSIZE;
/* Preprocessing of the Bad Character function shift */
void PRE_BC( char *x, int m, int bm_bc[] ) {
   int a, j;
   for ( a=0; a < ASIZE; a++ ) bm_bc[ a ] = m; 
   for ( j=0; j < m-1;  j++ ) bm_bc[ (unsigned char)x[ j ] ] = m - j - 1; 
  }
 /* Preprocessing of the Good Suffix function shift  */
void PRE_GS( char *x, int m,  int bm_gs[] ) {
   int i, j, p, f[XSIZE];
   memset( bm_gs, 0, ( m + 1 ) * sizeof( int ) );
   f[ m ] = j = m + 1; 
   for (i=m; i > 0; i-- ) {
      while ( j <= m && x[ i - 1 ] != x[ j - 1 ] ) {
        if ( bm_gs[ j ] == 0 ) bm_gs[ j ] = j - i;
       j = f[ j ];
     }
     f[ i - 1 ] = --j; 
   }
   p=f[ 0 ]; 
   for ( j=0; j <= m; ++j ) {
      if ( bm_gs[ j ] == 0 ) bm_gs[ j ] = p; 
     if ( j == p ) p = f[ p ]; 
   }
}
 
/* Boyer-Moore string matching algorithm */
void BM( char *x, char *y, int m )
{
    int fd,rd,bufferSize=128,i, j, bm_gs[XSIZE], bm_bc[ASIZE];
    char bufferRead[bufferSize];
    if((fd=open(y,O_RDONLY)) == -1)
    {
        fprintf(stderr,"Open failed:%s (errno=%d)\n",strerror(errno),errno);
        exit(EXIT_FAILURE);
    }
  /* Preprocessing */
  PRE_GS( x, m, bm_gs );
  PRE_BC( x, m, bm_bc );
int n,count=1;
while ((rd=read(fd,bufferRead,bufferSize))>0)
{i=0;
//
y=bufferRead;
n=strlen(bufferRead);
  while ( i <= n-m )
   {//from file
    for ( j=m-1; j >= 0 && x[ j ] == y[ i+j ]; --j );
    if ( j < 0 )
    {
      printf("%d \n",count*bufferSize+i);
      i += bm_gs[ j+1 ];
    }
    else i += MAX(( bm_gs[ j+1 ]), ( bm_bc[ (unsigned char)y[ i+j ] ] - m + j + 1 ) );
   }
count ++;
}
}
 
int main(void)
{
char ToFindIn[]="Java";
XSIZE=strlen(ToFindIn);
BM(ToFindIn,"/home/andrey_polyakov/1.html",XSIZE);
printf("finished\n");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru