• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czy w zdaniu znajduje się określone słowo. Jak to zrobić?

Object Storage Arubacloud
0 głosów
289 wizyt
pytanie zadane 9 października 2018 w C i C++ przez Karolus Użytkownik (510 p.)

Witam jak sprawdzić czy w zdaniu np "CzarneDużeJeżyny" jest słowo "jeżyny"?

Nie potrzebuje gotowego kodu tylko jakiś porad/pomysłów bo to zadanie jest moją pracą domową(spacje należy pominąć) 

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char zdanie[100],slowo[100];
    cout<<"Podaj zdanie"<<endl;
    cin>>zdanie;
    cout<<"Podaj slowo"<<endl;
    cin>>slowo;
    int licznik=1;
    for(int i=0;i<strlen(zdanie);i++)
    {
        for(int j=0;j<strlen(slowo);j++)
        {
            if(slowo[j]==zdanie[i])
            {
                licznik++;
            }
        }
    }




    if(licznik>strlen(slowo))
    {
        cout<<"tak zawiera sie";
    }
    else
    {
        cout<<"nie zawiera sie";
    }









    return 0;
}

ten kod który napisałem jest zły ale w sumie troche działa więc pewnie potrzeba jakiś drobnych poprawek. Kiedy wpiszemy zdanie np abbbc i słowo aaa to wtedy program mówi że słowo aaa zawiera się w zdaniu abbbc... 

Dodam że w programowaniu w C++ jestem początkujący.

Z góry  dziękuje i pozdrawiam.

4 odpowiedzi

+3 głosów
odpowiedź 9 października 2018 przez mokrowski Mędrzec (155,460 p.)
Zerknij do metod find(...) i ew. find_first_of(...) obiektu typu std::string.
0 głosów
odpowiedź 9 października 2018 przez Tpk Nałogowiec (40,100 p.)

Generalnie wydaje mi się, że idealnym rozwiązaniem byłoby tu zastosowanie RegExp czyli wyrażeń regularnych.

http://cpp0x.pl/artykuly/?id=47

0 głosów
odpowiedź 10 października 2018 przez Karolus Użytkownik (510 p.)

Dziękuje za pomoc. Sprawdziłem RegExp jak i find(...) Na tym drugim oparłem nawet program który działał. Musze was przeprosić bo nie powiedziałem o tym że ten program musi być oparty o pentle zagnieżdzone bez żadnych funkcji z innych bibliotek oprócz funkcji strln(). 

Napisałem kod , moim zdaniem to  tragedia no ale działa,

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char zdanie[256],slowo[256];
    int tab[256];
    int liczba_pierwszej_litery,licznik=0;
    cout<<"Podaj zdanie"<<endl;
    cin>>zdanie;
    cout<<"Podaj slowo"<<endl;
    cin>>slowo;
    for(int i=0,j=0;i<strlen(zdanie);i++)
    {
        if(slowo[0]==zdanie[i])
        {
            j++;
            tab[j]=i;
            liczba_pierwszej_litery=j;

        }

    }

    for(int i=1;i<=liczba_pierwszej_litery;i++)
    {
        for(int j=1;j<strlen(slowo);j++)
        {
            if(zdanie[tab[i]+1]==slowo[j])licznik++;
            

        }
        if(licznik==0) break;


    }

            if(licznik>=1)
            {
                cout<<"zawiera sie";
            }
            else
            {
                cout<<"nie zawiera sie";
            }



    return 0;
}

błąd jest tylko wtedy kiedy wpiszemy jako słowo zdanie wspak.

Czy ten kod jest raczej do wyrzucenia czy może można go trochę ulepszyć?

 

komentarz 10 października 2018 przez garris Użytkownik (660 p.)

Możesz spróbować jakoś tak:

bool test = false;
for(int i=0;i<slowo.length();i++){
    if(slowo[i]==slowo2[0]){
        for(int j=0;j<slowo2.length();j++){
            if(slowo[i+j]!=slowo2[j])
                 break;
            else if(j==slowo2.length()-1)
                test = true;
        }
    }
if(test) {
    cout << "Zawiera" << endl;
    break;
}
}

Na końcu już po pętli sprawdź sobie tylko, czy test dalej jest false, jeżeli tak to nie zawiera. Nie wiem, czy to działa, ale wydaję mi się, że jakoś tak się uda.

Edytowałem bo znalazłem błąd.

komentarz 10 października 2018 przez Karolus Użytkownik (510 p.)
Dzięki wielkie. Sprawdziłem, działa podobnie jak mój czyli nie zawsze ale Twój kod wygląda lepiej :D
0 głosów
odpowiedź 10 października 2018 przez Karolus Użytkownik (510 p.)
edycja 11 października 2018 przez Karolus

ten kod działa na 90% z tego co testowałem wywala sie w tedy kiedy pierwszej litery słowa nie ma w zdaniu (co jest logiczne) ale to da sie naprawić zwykłym ifem.

Nie jestem profesjonalistą ale wklejam ten kod może komuś kiedyś pomoże 

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char zdanie[256],slowo[256];
    int tab[100];
    int liczba_pierwszej_litery,licznik=0,liczba_ostatniej_litery;
    cout<<"Podaj zdanie"<<endl;
    cin>>zdanie;
    cout<<"Podaj slowo"<<endl;
    cin>>slowo;
    for(int i=0,j=0;i<=strlen(zdanie);i++)
    {
        if(slowo[0]==zdanie[i])
        {
            tab[j]=i;
            liczba_pierwszej_litery=j;
            j++;
        }
    }

    for(int i=0;i<=liczba_pierwszej_litery;i++)
    {
        for(int j=1;j<=strlen(slowo);j++)
        {
            if(zdanie[tab[i]+j]==slowo[j])
            {
                licznik++;

            }

        }
        if(licznik>=strlen(slowo))
        {
          break;
        }
    }
    if(licznik>=strlen(slowo))
    {
        cout<<"tak";
    }
    else
    {
        cout<<"nie";
    }

    return 0;
}

 

komentarz 11 października 2018 przez Karolus Użytkownik (510 p.)

poprawka Ten kod działa na 100%

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char zdanie[256],slowo[256];
    int tab[100],licznik[10]={NULL};
    int liczba_J;
    cout<<"Podaj zdanie"<<endl;
    cin>>zdanie;
    cout<<"Podaj slowo"<<endl;
    cin>>slowo;

    for(int i=0,I=0,J=0;i<strlen(zdanie);i++,I++,J++)
    {
        for(int j=I;j<=strlen(zdanie);j++)
        {
            if(i==strlen(slowo)) i=0;
            if(I<=0)break;
            if(slowo[j-I]==zdanie[j-1])licznik[J]++;
            liczba_J=J;
        }
    }
    int j=0;
   for(int i=0;i<=liczba_J;i++)
   {
       if(licznik[i]==strlen(slowo))
       {
           cout<<"tak";
           j++;
           break;

       }

   }
    if(j==0)
    {
        cout<<"nie";

    }

    return 0;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 255 wizyt
0 głosów
3 odpowiedzi 647 wizyt
pytanie zadane 17 marca 2017 w C i C++ przez Sensej Użytkownik (540 p.)
0 głosów
2 odpowiedzi 281 wizyt
pytanie zadane 26 sierpnia 2016 w HTML i CSS przez Maks Nowicjusz (210 p.)

92,539 zapytań

141,382 odpowiedzi

319,480 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...