1 / 1 / 0
Регистрация: 27.02.2016
Сообщений: 10
1

Алгоритм Рабина-Карпа

28.11.2016, 23:40. Показов 1028. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
в данной лабораторной не работает только самая главная часть-поиск подстроки,казалось бы на алгоритм тот,но что то не получается ,буду очень благодарен за любую помощь
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
zagalovok.h
#include <iostream>
#include <Windows.h>
#include <string>
#include <fstream>
#include <vector>
#pragma warning(disable: 4996)
using namespace std;
class RK
{
private:
    char s[256];
    int r[256];
    string t;
    string h;
    vector<int> g;
    int um = 113;
    int o = 0;
public:
    void vvod();
    void schitivanie();
    void perevod();
    void poisk();
    void vivod();
    int  prom(int j, int i);
};
main.cpp
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//АЛГОРИТМ РАБИНА-КАРПА
//Реализовать быстрый алгоритм поиска строки в файле.
//На вход программа получает текстовый файл,
//а строка для поиска вводится с клавиатуры.
//Программа должна вывести на экране участки текста, в которых найдена строка.
#include "zagalovok.h"
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    RK r;
    r.vvod();
    r.schitivanie();
    r.perevod();
    r.poisk();
    //r.vivod();
}
funkzii.cpp
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
        #include "zagalovok.h"
void RK::vvod()
{
    char c;
    int i = 0;
    cout << "Введите искомую строку" << endl;
    while ((c = getchar()) != '\n')//заполняем строку,которую необходимо найти в тексте
    {
        s[i] = c;
        i++;
    }
    s[i] = '\0';
}
void RK::schitivanie()
{
    int ch=0;
    ifstream ifs;
    ifs.open("1.txt");
    while ((ch = ifs.get()) != EOF)
    {
        t.push_back(char(ch));
    }
}
void RK::perevod()
{
    int i = 0;
    int p = 0;
    int j = 0;
    while (s[i] != '\0')
    {
        if (s[i] == ' ' || s[i] == '\n')
        {
            g.push_back(p);
            g.push_back(j);
            p = 0;
            o++;
            j = 0;
        }
        else
        {
            j++;
            p = p + (int)s[i] * um;
        }
        i++;
    }
    g.push_back('\0');
    /*vector<int>::iterator it;
    for (it = g.begin(); it<g.end(); ++it)
    {
        cout << *it << ends;
    }*/
}
void RK::poisk()
{
    int i = 0;         /////////////////ОШИБКА ЗДЕСЬ
    int j = 0;
    int p = 0;
    int e = 0;
    p = prom(j, i);
    while (i != t.size())
    {
        if (p == g[j])
        {
            cout << "1" << endl;
            r[e] = i;
            r[e + 1] = i + g[j + 1] - 1;
            i = i + g[j];
            j = j + 2;
            e = e + 2;
            prom(j, i);
        }
        if (p != g[j])
        {
            p = p - ((int)t[i] * um) + ((int)t[i + g[j + 1]] * um);
        }
        i++;
    }
    r[e + 1] = '\0';
}
int  RK::prom(int j, int i)
{
    int p = 0;
    for (int k = i; k < g[j + 1]; k++)
    {
        p = p + (int)t[k] * um;
    }
    return p;
}
void RK::vivod()
{
    int i = 0;
    int j = 0;
    int p = 0;
    int s = g.size();
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    while (t[i] != '\0')
    {
        p = r[j];
        if (i ==p)
        {
            SetConsoleTextAttribute(hConsole, (WORD)((15 << 4) | 0));
            for (int e = 0; i-1 != r[j+1]; e++, i++)
            {
                cout << t[i];
            }
            j=j+2;
            SetConsoleTextAttribute(hConsole, (WORD)((7 << 0) | 4));
        }
        else
        {
            cout << t[i];
        }
        i++;
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2016, 23:40
Ответы с готовыми решениями:

Алгоритм Рабина-Карпа
Всем доброго времени суток! Имеется код Алгоритма Рабина-Карпа, поиск подстроки в строке. Сегодня...

Алгоритм Рабина-Карпа, нужны комментарии к коду
Привет всем. Столкнулся с задачей разобраться с кодом алгоритма рабина карпа. Объясните пожалуйста...

Усовершенствовать алгоритм Рабина-Карпа, чтобы он искал символьную подматрицу в символьной матрице
У меня есть этот алгоритм. Кто знает, как усовершенствовать его, чтобы он искал символьную...

Реализация алгоритма Рабина-Карпа для двух однонаправленных линейных списков
Здравствуйте! Собственно, вопрос находится в заголовке: у меня описано два списка, надо этим...

0
28.11.2016, 23:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2016, 23:40
Помогаю со студенческими работами здесь

(ищу алгоритм) Хопкрофта-Карпа
Люди, помогите пожалуйста. Есть у кого реализация алгоритма Хопкрофта-Карпа? Весь интернет излазил...

Алгоритм шифрования Рабина
Привет всем! :) Очень нужен исходник на С++ или С# для алгоритма шифрования/дешифрования Рабина....

Алгоритм Рабина-Карпа
Необходимо написать программу на ассемблере которая будет выполнять поиск строки в тексте по...

Алгоритм Рабина Карпа
Здравствуйте форумчане, снова нуждаюсь в помощи. Помогите реализовать одну вещь алгоритмом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru