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

0 głosów
172 wizyt
pytanie zadane 9 października 2018 w C i C++ przez Karolus Początkujący (260 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 VIP (101,860 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 Pasjonat (20,040 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 Początkujący (260 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 (630 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 Początkujący (260 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 Początkujący (260 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 Początkujący (260 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 83 wizyt
0 głosów
3 odpowiedzi 89 wizyt
pytanie zadane 17 marca 2017 w C i C++ przez Sensej Początkujący (490 p.)
0 głosów
2 odpowiedzi 81 wizyt
pytanie zadane 26 sierpnia 2016 w HTML i CSS przez Maks Nowicjusz (210 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

62,317 zapytań

108,449 odpowiedzi

226,396 komentarzy

35,105 pasjonatów

Przeglądających: 228
Pasjonatów: 17 Gości: 211

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...