łańcuchy w c - strstr

0

Witajcie!
Mam za zadanie napisać funkcję, która odszuka w przykładowym tekście podane na wyjściu słowa, ignorując przy tym ich fragmenty. W tym celu korzystam z funkcji fgets zamkniętej w pętli, do pobierania kolejnych linii tekstu oraz funkcji strstr aby wyszukać dane słowo. Skorzystałem z tego, że funkcja strstr zwraca wskaźnik na pierwszą literę wyszukanego wyrazu. Aby pominąć wyszukiwanie fragmentów słów, zastosowałem zasadę, aby litera przed słowem oraz po danym słowie była różna od liter z przedziałów a-z oraz A-Z. Niestety napisana funkcja nie działa (program nadal wyszukuje fragmenty słów), a podczas kompilacji wyświetlają się ostrzeżenia "comparison between pointer and integer". Co można zmienić w owej funkcji, aby działała zgodnie z założeniami. Byłbym wdzięczny za każdą wskazówkę.

 char *x;
  
    for( i= 0; i < ile_slow; i++ )
	
      if(( x=strstr( buf, slowo[i] ) != NULL)&&((((x-1)<'A'||(x-1)>'Z')&&((x-1)<'a'||(x-1)>'z'))&&(((x+strlen(slowo[i]))<'A'||(x+strlen(slowo[i]))>'Z')&&((x+strlen(slowo[i]))<'a'||(x+strlen(slowo[i]))>'z'))) )  
      {
				dodaj( &slowa, i, nr_linii );
				x++;
      }
  }
1

Usuń obfuskację, potem pogadamy.

0

Wrzuć kod, który da się skompilować, a nie fragment jakiś.

1

Takie porównania:

((x-1)<'A'

są złe. x jest pointerem, a Ciebie zdaje się interesuje wartość wskazywana przez pointer. Hint: operatory [] albo *.

1

x jest wskaźnikiem na char, więc robiąc (x-1) czy (x+strlen(slowo)), tylko przesuwasz wskaźnik, ale nie dokonujesz dereferencji. Twoje warunki dokonują zatem porównania 'a'/'z'/'A'/'Z' a adresem, a nie znakiem pod adresem. Musisz dodać dereferencję - przerób (x+1) na *(x+1), albo x[1].

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