0% found this document useful (0 votes)
6 views

Lab2 C

Lab program vtu 3rd sem
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views

Lab2 C

Lab program vtu 3rd sem
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

/* Write a C program to implement the Knuth-Morris-Pratt (KMP) string matching

algorithm. The program should include:


� A function to preprocess the pattern and create the match table.
� A function to search for all occurrences of the pattern in a given text using
the KMP algorithm.
*/

#include <stdio.h>
#include <string.h>

// Function to preprocess the pattern and create the LPS array


void computeLPSArray(char *pattern, int patternLength, int *lps)
{
int length = 0; // Length of the previous longest prefix suffix
lps[0] = 0; // LPS[0] is always 0
int i = 1;
// The loop calculates lps[i] for i = 1 to patternLength - 1
while (i < patternLength)
{
if (pattern[i] == pattern[length])
{
length++;
lps[i] = length;
i++;
}
else
{
if (length != 0)
{
length = lps[length - 1];
// Note that we do not increment i here
}
else
{
lps[i] = 0;
i++;
}
}
}
}

// Function to perform KMP string matching algorithm


void KMP_Search(char *text, char *pattern)
{
int textLength = strlen(text);
int patternLength = strlen(pattern);
int lps[patternLength]; // Create lps array
// Preprocess the pattern to create the LPS array
computeLPSArray(pattern, patternLength, lps);
int i = 0; // Index for text
int j = 0; // Index for pattern
while (i < textLength)
{
if (pattern[j] == text[i])
{
i++;
j++;
}
if (j == patternLength)
{
printf("Pattern found at index %d\n", i - j);
j = lps[j - 1]; // Reset j using the LPS array
}
else if (i < textLength && pattern[j] != text[i])
{
// Mismatch after j matches
if (j != 0)
{
j = lps[j - 1]; // Use LPS to avoid unnecessary comparisons
}
else .
{
i++;
}
}
}
}

// Main function
int main()
{
char text[1000];
char pattern[100];

printf("Enter the text: ");


fgets(text, sizeof(text), stdin);
text[strcspn(text, "\n")] = '\0'; // Remove newline character

printf("Enter the pattern: ");


fgets(pattern, sizeof(pattern), stdin);
pattern[strcspn(pattern, "\n")] = '\0'; // Remove newline character

KMP_Search(text, pattern);

return 0;
}

You might also like