Funkcja match(char* wzorzec, char* łancuch)

0

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("a
bbc", 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;
}

2

Mam masowe deja vu. Biedni studenci PWr.

1 użytkowników online, w tym zalogowanych: 0, gości: 1