Cześć, mam zrobić takie zadanie:
Napisz funkcje match(char* wzorzec, char* łancuch), która ustala zgodnosc wzorca z
łancuchem. Znak ’ ?’ we wzorcu oznacza zgodnosc z dowolnym innym znakiem. Znak
’’ oznacza zgodnosc z dowolnym, równiez pustym, ciagiem znaków w łancuchu.
Znak rózny od ’ ?’ i ’’ oznacza zgodnosc tylko z samym soba.
Na przykład
match(”.doc”,s) ma zwracac true wtedy i tylko wtedy, gdy napis s jest ciagiem
dowolnych znaków z czterema ostatnimi znakami ’.doc’
match(”a???”,s) ma zwracac true wtedy i tylko wtedy, gdy s ma długosc 4 i
zaczyna sie od litery ’a’
match("abbc", s) ma zwracac true wtedy i tylko wtedy, gdy napis s zaczyna
sie od litery ’a’ i konczy sie litera ’c’ a miedzy nimi znajduja sie przynajmniej
dwie litery ’b’ (niekoniecznie obok siebie)
Mam mały problem, bo program nie działa mi dla "*" :/ Czy znajdzie się jakaś dobra osoba , która zerknie na to co napisałam i gdzie może być błąd?
#include <stdio.h>
#include <string.h>
int match(char* wzorzec, char* łańcuch)
{
int p = 1;
int i, j, k, l;
for(i = 0, j = 0; i < strlen(łańcuch); i++, j++)
{
if(wzorzec[j] == '?')
{
continue;
}
if(wzorzec[j] == '*')
{
l = 0;
p = 0;
while(łańcuch[i] != wzorzec[j+1] && i < strlen(łańcuch))
{
i++;
if(łańcuch[i] == wzorzec[j+1])
{
p= 1;
}
}
while(j <= strlen(wzorzec) && wzorzec[j+1] != '?' && wzorzec[j+1] != '*')
{
j++;
l++;
}
j -= l;
if(łańcuch[i+l] == strlen(wzorzec) || łańcuch[i+l] == '?' || łańcuch[i+l] == '*')
{
j++;
for(k = 0; k < l; k++)
{
if(łańcuch[i] != wzorzec[j])
{
p = 0;
break;
}
}
}
}
if(łańcuch[i] != wzorzec[j] || strlen(łańcuch) < strlen(wzorzec))
{
p = 0;
break;
}
}
return p;
}
int main()
{
char wzorzec[1000];
char łańcuch[1000];
int p;
printf("Podaj wzorzec\n");
scanf("%s", wzorzec);
printf("Podaj łańcuch\n");
scanf("%s", łańcuch);
p = match(wzorzec, łańcuch);
if(p == 1)
{
printf("Łańcuch jest zgodny z wzorcem.");
}
else
{
printf("Łańcuch nie jest zgodny z wzorcem.");
}
return 0;
}