strMatch - działanie

0

Witam,
chciałbym zadać kilka pytań od początkującego w C.

  1. Może mi ktoś wyjaśnić jakie działanie ma znak * przy char?
  2. Na jakiej zasadzie odbywa się porównywanie zdań. Tzn. o co chodzi w:
*pattern=='\0'

Czemu ma ta zmienna być równa?
3. I może mi ktoś powiedzieć jak działa 3 część?

if(*pattern==*string || *pattern=='z') return strMatch(pattern+1,string+1);
		else if(*pattern=='*') return strMatch(pattern+1,string) || strMatch(pattern+1, string+1) || strMatch(pattern,string+1);

Co tutaj jest sprawdzane?

Cały program:

#include <stdio.h>

int strMatch(char* pattern, char* string) {
	if(*pattern=='\0' && *string=='\0') return 1; // 
	if(*pattern=='\0' || *string=='\0' && *string!=*pattern) return 0;
	if(*pattern==*string || *pattern=='z') return strMatch(pattern+1,string+1);
		else if(*pattern=='*') return strMatch(pattern+1,string) || strMatch(pattern+1, string+1) || strMatch(pattern,string+1);
			else return 0;
			
}

main()
{
	char pattern[100];
	char string[100];
	printf("Wzorzec: ");
	scanf("%s" , &pattern);
	printf("Lancuch: ");
	scanf("%s" , &string);
	printf("\nWartosc: %d", strMatch(pattern, string));
}
1

Operator* w tym przypadku to dereferencje, wyluskuje ona obiekt spod adresu wskazywanego przez dany wskaznik.
Funkcja: porownuje lancuchy znakow rekurencyjnie przechodzac przez kazdy odpowiadajacy sobie znak.
Nie do konca robi to co by miala robic ;D
if(*pattern==*string || pattern=='z') return strMatch(pattern+1,string+1); Jesli znak spod pattern i string jest rowny albo znak spod pattern jest rowny 'z' zwraca wywolanie funkcji strMatch z adresami o 1 znak dalej.
else if(pattern=='') return strMatch(pattern+1,string) || strMatch(pattern+1, string+1) || strMatch(pattern,string+1); ew. jesli znak pod pattern jest rowny '
' zwraca 1 jesli, ktora z funkcji zwroci wartosc rozna od zera, a zero w przeciwnym wypadku.
Ostatniego warunku chyba nie trzeba tlumaczyc.

0

Kurna dzięki, trochę mi się objaśniło. :D Tylko nie rozumiem sprawdzania czy jakiś znak w patternie jest równy "z"? Po co to? :P

0

Chciałbym wrócić jeszcze do ostatniej części.
else if(pattern=='') return strMatch(pattern+1,string) || strMatch(pattern+1, string+1) || strMatch(pattern,string+1)

Gwiazdka w pattern ma zastąpić ciąg znaków i wtedy wartość będzie 1. W przypadku gdy jako pattern dam: "pi*" a w string "pies" to wartość będzie 1. Tylko która z opcji - return strMatch(pattern+1,string) || strMatch(pattern+1, string+1) || strMatch(pattern,string+1) - zostanie wybrana? Jak te trzy odwołania działają? Kiedy zwrócona jest funkcja 1, kiedy 2 a kiedy 3?

0

Troche zle napisalem:
Jesli ktorakolwiek z tych funkcji zwroci wartosc rozna od zera to ta funkcji zwroci wartosc rozna od zera w przeciwnym wypadku zwroci zero.
W tym pierwszym nie rozumiem o co Ci chodzi.

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