Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 16
1

Алгоритм Кнута-Морриса-Пратта - определить, сколько раз встречается заданное слово в текстовом файле

01.06.2014, 11:09. Показов 1987. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, мне нужно найти алгоритмом Кнута-Морриса-Пратта сколько раз встречается какое-нибудь слово в текстовом файле. Файл заполнен вручную, шаблон вбивается в программе. Проблема в том, что файл не подходит для аргумента *char, а именно так был построен алгоритм поиска, что нужно исправить?
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
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
void computeLPSArray(char *pat, int M, int *lps);
 
void KMPSearch(char *pat, char *txt)
{
    int M = strlen(pat);
    int N = strlen(txt);
 
    // create lps[] that will hold the longest prefix suffix values for pattern
    int *lps = (int *)malloc(sizeof(int)*M);
    int j = 0;  // index for pat[]
 
    // Preprocess the pattern (calculate lps[] array)
    computeLPSArray(pat, M, lps);
 
    int i = 0;  // index for txt[]
    while (i < N)
    {
        if (pat[j] == txt[i])
        {
            j++;
            i++;
        }
 
        if (j == M)
        {
            printf("Found pattern at index %d \n", i - j);
            j = lps[j - 1];
        }
 
        // mismatch after j matches
        else if (pat[j] != txt[i])
        {
            // Do not match lps[0..lps[j-1]] characters,
            // they will match anyway
            if (j != 0)
                j = lps[j - 1];
            else
                i = i + 1;
        }
    }
    free(lps); // to avoid memory leak
}
 
void computeLPSArray(char *pat, int M, int *lps)
{
    int len = 0;  // lenght of the previous longest prefix suffix
    int i;
 
    lps[0] = 0; // lps[0] is always 0
    i = 1;
 
    // the loop calculates lps[i] for i = 1 to M-1
    while (i < M)
    {
        if (pat[i] == pat[len])
        {
            len++;
            lps[i] = len;
            i++;
        }
        else // (pat[i] != pat[len])
        {
            if (len != 0)
            {
                // This is tricky. Consider the example AAACAAAA and i = 7.
                len = lps[len - 1];
 
                // Also, note that we do not increment i here
            }
            else // if (len == 0)
            {
                lps[i] = 0;
                i++;
            }
        }
    }
}
 
// Driver program to test above function
int main()
{
    FILE* file;
    file = (FILE *)fopen("text.txt", "a+");
    char *file = "ABABDABACDABABCABAB";
    char *pat = "AB";
    KMPSearch(pat, file);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2014, 11:09
Ответы с готовыми решениями:

Определить, сколько раз в текстовом файле встречается заданное слово
Здравствуйте, не хватает знаний написать программу на Си: &quot;Составить программу, определяющую,...

Найти, сколько раз заданное слово встречается в файле
Нужна рабочая программа на си,которая будет выдавать сколько раз заданное с клавиатуры слово...

Определить, сколько раз в строке встречается заданное слово
4,3) Определить, сколько раз в строке встречается заданное слово

Посчитать, сколько раз заданное слово встречается в тексте
пролистал огромное количество темок, на самое ближайшее, что я смог найти это вот этот код...

1
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
01.06.2014, 11:31 2
KawaiiBeatis,
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main(void)
{
    long f_size;
    char *text, pat[128];
    FILE* file = fopen("text.txt", "rb");
    if(!file) return -1;
 
    fseek(file, 0, SEEK_END);
    f_size = ftell(file);
    rewind(file);
    text = malloc(f_size);
    fread(text, f_size, 1, file);
    printf("Input word: ");
    scanf("%127", pat);
    KMPSearch(pat, text);
 
    fclose(file);
    return 0;
}
0
01.06.2014, 11:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2014, 11:31
Помогаю со студенческими работами здесь

Найти, сколько раз в каждой строке текста встречается заданное слово
Всем доброго времени суток! Мне лишь необходимы ваши подсказки, либо алгоритм решения следующего...

Определить, сколько раз встречается заданное число среди элементов массива
1. Дан двухмерный массив n×m элементов. Определить, сколько раз встречается число 7 среди элементов...

Определить сколько раз строка встречается в файле
помогите пожалуйста.есть задание : Ввести с консоли имя файла,путь к файлу и произвольную текстовую...

Определить сколько раз встречается в тексте каждое слово
Выдать информацию о том, сколько раз встречается в тексте каждое слово. Лишний раз выводит...


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

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