You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
programming-examples/c/Basic/C Program to Implements Reg...

295 lines
10 KiB
C

/*
* C Program to Implements Regular Expression Matching
*/
#include <stdio.h>
#include <string.h>
#define MATCH printf("
The Text Matches The Regular Expression");
#define NOTMATCH printf("
The Text Doesn't match the Regular Expression");
char reg[20], text[20];
int main()
{
int i, rlen, tlen, f = 0;
char ans;
do
{
printf("
Enter the Regular Expression
");
scanf(" %[^
]s", reg);
for (rlen = 0; reg[rlen] != ''; rlen++);
printf("
Enter the text
");
scanf(" %[^
]s", text);
for (tlen = 0; text[tlen] != '' ; tlen++);
if (reg[0] == '*')
{
printf("
Invalid regular expression");
}
/*
*If the regular expression starts with Alphabet
*/
if ((reg[0] >= 65 && reg[0] <= 90) || (reg[0] >= 97 && reg[0] <=122))
{
if (reg[0] == text [0])
{
switch (reg[1])
{
case '.' :
switch (reg[2])
{
case '*':
if (tlen != 1)
{
if (reg[3] == text[tlen-1])
{
MATCH;
}
else
{
NOTMATCH;
}
}
else
{
NOTMATCH;
}
break;
case '+':
if (text[1] != reg[3])
{
if (reg[3] == text[tlen - 1])
{
MATCH;
}
else
{
NOTMATCH;
}
}
break;
case '?':
if (text[1] == reg[3] || text[2] == reg[3])
{
if (text[1] == reg[3] || text[2] == reg[3])
{
MATCH;
}
else
{
NOTMATCH;
}
}
else
{
NOTMATCH;
}
break;
}
break;
case '*':
if (reg[rlen-1] == text[tlen-1])
{
for (i = 0; i <= tlen-2; i++)
{
if(text[i] == reg[0])
{
f = 1;
}
else
{
f = 0;
}
}
if ( f == 1)
{
MATCH;
}
else
{
NOTMATCH;
}
}
else
{
NOTMATCH;
}
break;
case '+' :
if (tlen <= 2)
{
NOTMATCH;
}
else if (reg[rlen-1] == text[tlen-1])
{
for (i = 0; i < tlen-2; i++)
{
if (text[i] == reg[0])
{
f = 1;
}
else
{
f = 0;
}
}
if (f == 1)
{
MATCH;
}
else
{
NOTMATCH;
}
}
break;
case '?':
if (reg[rlen -1] == text[tlen-1])
{
MATCH;
}
else
{
NOTMATCH;
}
break;
}
}
else
printf("Does not match");
}
/*
*If Regular Expression starts with '^'
*/
else if (reg[0] == '^')
{
if (reg[1] == text[0])
{
MATCH;
}
else
{
NOTMATCH;
}
}
/*
*If Regular Expression Ends with '$'
*/
else if (reg[rlen-1] == '$')
{
if (reg[rlen-2] == text[rlen-1])
{
MATCH;
}
else
{
NOTMATCH;
}
}
else
printf("Not Implemented");
printf("
Do you want to continue?(Y/N)");
scanf(" %c", &ans);
}
while (ans == 'Y' || ans == 'y');
}
Enter the Regular Expression
C.*g
Enter the text
Cprogramming
The Text Matches The Regular Expression
Do you want to continue?(Y/N)y
Enter the Regular Expression
C*g
Enter the text
Cprogramming
The Text Doesn't match the Regular Expression
Do you want to continue?(Y/N)y
Enter the Regular Expression
C?.*g
Enter the text
Cprogramming
The Text Matches The Regular Expression
Do you want to continue?(Y/N)y
Enter the Regular Expression
C.?g
Enter the text
Cprogramming
The Text Doesn't match the Regular Expression
Do you want to continue?(Y/N)y
Enter the Regular Expression
C.+g
Enter the text
Cprogramming
The Text Matches The Regular Expression
Do you want to continue?(Y/N)y
Enter the Regular Expression
C+g
Enter the text
Cprogramming
The Text Doesn't match the Regular Expression
Do you want to continue?(Y/N)y
Enter the Regular Expression
^C.*
Enter the text
Cprogramming
The Text Matches The Regular Expression
Do you want to continue?(Y/N)y
Enter the Regular Expression
^p.*
Enter the text
Cprogramming
The Text Doesn't match the Regular Expression
Do you want to continue?(Y/N)y
Enter the Regular Expression
C.*g$
Enter the text
Cprogramming
The Text Matches The Regular Expression
Do you want to continue?(Y/N)y
Enter the Regular Expression
C.*n$
Enter the text
Cprogramming
The Text Doesn't match the Regular Expression
Do you want to continue?(Y/N)n