• 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
165 wizyt
pytanie zadane 9 października 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 przez mokrowski Szeryf (88,240 p.)
Zerknij do metod find(...) i ew. find_first_of(...) obiektu typu std::string.
0 głosów
odpowiedź 9 października przez Tpk Stary wyjadacz (12,560 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 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 przez garris Użytkownik (610 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 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 przez Karolus Początkujący (260 p.)
edycja 11 października 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 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 69 wizyt
0 głosów
3 odpowiedzi 85 wizyt
pytanie zadane 17 marca 2017 w C i C++ przez Sensej Początkujący (490 p.)
0 głosów
2 odpowiedzi 77 wizyt
pytanie zadane 26 sierpnia 2016 w HTML i CSS przez Maks Nowicjusz (210 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

56,369 zapytań

101,067 odpowiedzi

208,200 komentarzy

28,039 pasjonatów

Przeglądających: 323
Pasjonatów: 10 Gości: 313

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.

...