Lab Program 2:
Design, Develop and Implement a Program in C for the following operations on Strings
a. Read a main String (STR), a Pattern String (PAT) and a Replace String (REP)
b. Perform Pattern Matching Operation: Find and Replace all occurrences of PAT in STR with REP if PAT exists in STR.
c. Report suitable messages in case PAT does not exist in STR
Support the program with functions for each of the above operations. Don't use Built-in functions.
#include<stdio.h>
char str[50], pat[20], rep[20], ans[50];
int c=0, m=0, i=0, j=0, k, flag=0;
void stringmatch()
{
while(str[c] !='\0')
{
if(str[m] == pat[i])
{
i++;
m++;
if(pat[i] == '\0')
{
flag = 1;
for(k=0; rep[k]!='\0'; k++, j++)
{
ans[j] = rep[k];
}
i = 0;
c = m;
}
}
else
{
ans[j]= str[c];
j++;
c++;
m=c;
i=0;
}
}
ans[j]='\0';
}
void main()
{
printf("\nEnter the main string:");
gets(str);
printf("\nEnter the pat string:");
gets(pat);
printf("\nEnter the replace string:");
gets(rep);
stringmatch();
if(flag == 1)
printf("\nResultant string is %s", ans);
else
printf("\nPattern string is not found");
}
Enter the main string: hello aabhii howaab
Enter the pat string: aab
Enter the replace string: klmno
Resultant string is: hello klmnohii howklmno
Method 2:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char str[50], pat[50], rep[50];
int start = 0, patfound = 0;
int lasts, lastp, lastr;
void replacepattern()
{
int i, j;
lastr = strlen(rep)-2;
if(lastp != lastr)
{
printf("\nInvalid length of replace string");
exit(0);
}
else
{
i = start;
for(j=0; j<=lastr; j++)
{
str[i] = rep[j];
i++;
}
}
return;
}
void findpattern()
{
int i, j, inmatch;
lasts = (strlen(str))-2;
lastp = (strlen(pat))-2;
int endmatch;
for(endmatch = lastp; endmatch<=lasts; endmatch++, start++)
{
if(str[endmatch] == pat[lastp])
{
inmatch = start;
j=0;
while(j<lastp)
{
if(str[inmatch] == pat[j])
{
inmatch++;
j++;
}
else
{
break;
}
}
if(j == lastp)
{
patfound = 1;
replacepattern();
}
}
}
return;
}
void main()
{
printf("\nEnter the main string(STR): ");
fgets(str, 50, stdin);
printf("\nEnter the pattern to be matched(PAT): ");
fgets(pat, 50, stdin);
printf("\nEnter the string to be replaced(REP): ");
fgets(rep, 50, stdin);
printf("\nThe string before pattern match is:\n %s", str);
findpattern();
if(patfound == 0)
printf("\nThe pattern is not found in the main string");
else
printf("\nThe string after pattern match and replace is: \n %s ",str);
return;
}
Output:
Case 1:
Enter the main string(STR): Hello hii how are you hii
Enter the pattern to be matched(PAT): hii
Enter the string to be replaced(REP): xyz
The string before pattern match is:
Hello hii how are you hii
The string after pattern match and replace is:
Hello xyz how are you xyz
Case 2:
Enter the main string(STR): Hello hii how are you
Enter the pattern to be matched(PAT): abc
Enter the string to be replaced(REP): xyz
The string before pattern match is:
Hello hii how are you
The pattern is not found in the main string
Also Credits to:
Manoj Taleka (manoj89biet@gmail.com)
Yashaswini Jogi (jogi.yash@gmail.com)
Which pattern matching algorithm is used in this program?
ReplyDeleteActually its according to Pattern Matching by checking end indices first.
ReplyDeleteReference : Page number 93, Data Structures in C - Horowitz, Sahni