• 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
168 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 Szeryf (95,020 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 Stary wyjadacz (13,640 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 (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 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 79 wizyt
0 głosów
3 odpowiedzi 87 wizyt
pytanie zadane 17 marca 2017 w C i C++ przez Sensej Początkujący (490 p.)
0 głosów
2 odpowiedzi 79 wizyt
pytanie zadane 26 sierpnia 2016 w HTML i CSS przez Maks Nowicjusz (210 p.)
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

59,199 zapytań

104,616 odpowiedzi

216,478 komentarzy

31,592 pasjonatów

Przeglądających: 143
Pasjonatów: 3 Gości: 140

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.

...