• 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ć?

VPS Starter Arubacloud
0 głosów
283 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 253 wizyt
0 głosów
3 odpowiedzi 626 wizyt
pytanie zadane 17 marca 2017 w C i C++ przez Sensej Użytkownik (540 p.)
0 głosów
2 odpowiedzi 277 wizyt
pytanie zadane 26 sierpnia 2016 w HTML i CSS przez Maks Nowicjusz (210 p.)

92,454 zapytań

141,262 odpowiedzi

319,097 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...