funkcja strstr

0

Program sprawdza czy pierwsze zdanie jest zawarte w drugim. I moje pierwsze pytanie to dlaczego funkcja printf dziwnie mi wyswietla napis a drugie to jak można zrobić żeby program brał pod uwagę to że zdania mogą być zupełnie różne i w żadną stronę nie będą się zawierały.

 #include <stdio.h>
#include <string.h>

int main()
{   printf("Sprawdz czy pierwsze zdanie jest zawarte w drugim.\n");
    char napis1[100];
    char napis2[100];
    fgets(napis1, sizeof(napis1), stdin);
    fgets(napis2, sizeof(napis2), stdin);
    char * wynik = strstr( napis2, napis1 );

    if(wynik==napis2)
    {
        printf("Oba zdania sa identyczne ,a wiec sa zawarte w sobie.\n");
    }
    if(wynik!=NULL && wynik!=napis2)
    {
        printf("\"%s\" jest zawarte w \"%s\" ale odwrotnie juz nie.\n",wynik, napis1);
    }
    if(wynik==NULL)
    {
        printf("\"%s\" nie jest zawarte w \"%s\" ale odwrotnie juz tak\n",napis1,napis2);
    }
    
    

    return 0;
}

0

Poczytaj jeszcze raz co zwraca funkcja strstr() - z kodu jednoznacznie wynika że nie wiesz.
Poczytaj też o słowie kluczowym else

0

Funkcja strstr zwraca nam wszystko do końca jak napotka na szukane wyrazy. to jakiej funkcji powinienem użyć ?

0

"Funkcja przeszukuje łańcuch znaków str1 w poszukiwaniu łańcucha znaków str2. Jeśli w łańcuchu przeszukiwanym znajduje się więcej niż jedno wystąpienie poszukiwanego ciągu znaków to funkcja zwróci adres na pierwsze wystąpienie. "

Dragonowi chyba chodziło o ten adres.

Zwracana wartość to wskaźnik na pierwsze wystąpienie str2 w łańcuchu str1 lub NULL, jeśli szukany ciąg znaków nie został odnaleziony.

0

To jakiej funkcji powinienem użyć ?

0

Właśnie tej, tylko że musisz zrozumieć co ona zwraca.

0

Wydaje mi się że wiem jak działa ta funkcja strstr ale gdy wpisuje do pierwsze zdanie "bitwa pod grunwaldem" i drugie "pod" to powinno wyrzucić "pod grunwaldem" przy takim kodzie

 #include <stdio.h>
#include <string.h>

int main()
{   printf("Sprawdz czy pierwsze zdanie jest zawarte w drugim.\n");
    char napis1[100];
    char napis2[100];
    fgets(napis1, sizeof(napis1), stdin);
    fgets(napis2, sizeof(napis2), stdin);
    char * wynik = strstr( napis1, napis2 );
    printf("%s",wynik);
    return 0;
}
0

A nie wyrzuca

0

Jak dla mnie to wyrzuca: http://ideone.com/x7saC0

1

Ale jak podasz w drugim: - "waldem" - to znajdzie.
Kolejnym problemem jest funkcja fgets która wczytuje razem z enterem (pod windowsami).

0
twonek napisał(a):

Jak dla mnie to wyrzuca: http://ideone.com/x7saC0

U mnie w Codeblocksie wyrzuca null ,a wyrzuca jedynie końcówki ciągu i nie wiem dlaczego ?

0

Przez tą funkcje gets? o to chodzi?

0

Dragon przeanalizowałem to co napisałeś i czy chodzi może o to, że w tym momencie

char napis1[100];
char napis2[100];

gdy przypiszemy do napis1 "Bitwa pod grunwaldem"
a do napis2 "pod" to zwróci nam wskaźnik do adresu

wynik[6]

czyli literę "p" przez to, że używanmy tablicy znaków?

Skarć mnie jeźeli się mylę :)

0

Mi się wydaje że zwróci na "pod grunwaldem".

1

@lisu1411, ależ pogmatwałeś ... to co napisałeś nie ma żadnego sensu ...
gdy przypiszemy do napis1 "Bitwa pod grunwaldem" a do napis2 "pod" to polecenie wynik=strstr(napis1,napis2); spowoduje że wskaźnik wynik będzie wskazywał na literę p w napisie napis1 czyli wartość napis1+6.
Przez to że takie jest działanie funkcji strstr, w której niczego oprócz tablicy znaków użyć nie możemy.

0

Dragon mógłbyś mi jeszcze raz wytłumaczyć czemu funkcja strstr wyswietla mi tylko znaki od końca do spacji ? tzn jak wpisuje w napis1 "bitwa pod grunwaldem" a w napis2 "pod" to wyrzuca null a jeżeli wpisze już "waldem" to mi wyrzuca "waldem"

0

I spróbowałem też zamienić

fgets(napis1, sizeof(napis1), stdin);
fgets(napis2, sizeof(napis2), stdin) 

na

 scanf("%99s", napis1);
scanf("%99s", napis2);

ale program pozwala mi tylko wczytać znaki do napis1 a potem Od razu wyrzuca null

0
#include <stdio.h>

int main(void)
  {
   char napis1[100];
   scanf("%[^\n]99s",napis1);
   printf("\"%s\"\n",napis1);
   return 0;
  }

http://ideone.com/nymuby

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