Output: Enter Text:Mr. Antony saw an Ant on Aunt's hand. Enter Pattern to Search:Ant Pattern found at index 4 Pattern found at index 18
Users Online
· Guests Online: 118
· Members Online: 0
· Total Members: 188
· Newest Member: meenachowdary055
· Members Online: 0
· Total Members: 188
· Newest Member: meenachowdary055
Forum Threads
Newest Threads
No Threads created
Hottest Threads
No Threads created
Latest Articles
Articles Hierarchy
C++ Program to Implement Rabin-Karp Method for Pattern Searching
C++ Program to Implement Rabin-Karp Method for Pattern Searching
This C++ program implements the Rabin-Karp method for string matching. A text and a pattern is given as input. The pattern is searched for in the text and all instances of the pattern are given as output.
This C++ program is successfully compiled and tested on our system. The program output is given below.
-
/*
-
* C++ program implements the Rabin-Karp method for string matching.
-
*/
-
#include<stdio.h>
-
#include<string.h>
-
#include<iostream>
-
#include<vector>
-
using namespace std;
-
-
// d is the number of characters in input alphabet
-
#define d 256
-
-
/* pat -> pattern
-
txt -> text
-
q -> A prime number
-
*/
-
-
void get_input(vector<char>& a)
-
{
-
char c;
-
while (1)
-
{
-
c = getchar();
-
if (c == '\n')
-
break;
-
a.push_back(c);
-
}
-
return;
-
}
-
-
-
void search(char *pat, char *txt, int q)
-
{
-
int M = strlen(pat);
-
int N = strlen(txt);
-
int i, j;
-
int p = 0; // hash value for pattern
-
int t = 0; // hash value for txt
-
int h = 1;
-
-
// The value of h would be "pow(d, M-1)%q"
-
for (i = 0; i < M-1; i++)
-
h = (h*d)%q;
-
-
// Calculate the hash value of pattern and first window of text
-
for (i = 0; i < M; i++)
-
{
-
p = (d * p + pat[i]) % q;
-
t = (d * t + txt[i]) % q;
-
}
-
-
// Slide the pattern over text one by one
-
for (i = 0; i <= N - M; i++)
-
{
-
-
// Check the hash values of current window of text and pattern
-
// If the hash values match then only check for characters on by one
-
if ( p == t )
-
{
-
/* Check for characters one by one */
-
for (j = 0; j < M; j++)
-
{
-
if (txt[i + j] != pat[j])
-
break;
-
}
-
if (j == M) // if p == t and pat[0...M-1] = txt[i, i+1, ...i+M-1]
-
{
-
printf("Pattern found at index %d \n", i);
-
}
-
}
-
-
// Calculate hash value for next window of text: Remove leading digit,
-
// add trailing digit
-
if ( i < N - M )
-
{
-
t = (d * (t - txt[i] * h) + txt[i + M]) % q;
-
-
// We might get negative value of t, converting it to positive
-
if (t < 0)
-
t = (t + q);
-
}
-
}
-
}
-
-
int main()
-
{
-
vector<char> txt;
-
vector<char> pat;
-
cout<<"Enter Text:";
-
get_input(txt);
-
cout<<"Enter Pattern to Search:";
-
get_input(pat);
-
char *text,*pattern;
-
text=&txt[0];
-
text[txt.size()]='\0';
-
pattern=&pat[0];
-
pattern[pat.size()]='\0';
-
int q = 101; // A prime number
-
search(pattern, text, q);
-
getchar();
-
return 0;
-
}
Comments
No Comments have been Posted.
Post Comment
Please Login to Post a Comment.