Wyszukiwanie czy jeden wyraz zawieta sie w drugim
Ostatnio zmodyfikowano 2017-06-05 20:55
Szkodnik78 Temat założony przez niniejszego użytkownika |
Wyszukiwanie czy jeden wyraz zawieta sie w drugim » 2017-06-05 19:21:24 Cześć! Zaczynam dopiero moją przygode z C++ i chciałem napisać program który sprawdzi czy pierwszy wyraz zawiera sie w drugim. Oto co napisałem: #include <iostream> #include <cstring>
using namespace std;
char pw[ 30 ], dw[ 30 ]; int dp = 0, dd = 0, i = 0, x = 0;
int main() { cout << "Podaj pierwszy wyraz: "; cin >> pw; cout << "Podaj drugi wyraz: "; cin >> dw; dp = strlen( pw ); dd = strlen( dw ); if( dp > dd ) { cout << "Pierwszy wyraz jest dluzszy od drugiego!!"; } else { while( i < dd || x < dp ) { if( pw[ x ] == dw[ i ] ) { x++; i++; } else { if( x > 0 ) { x = 0; } else { i++; } } } if( dp == x ) { cout << "Pierwszy wyraz zawiera sie w drugim!!"; } else { cout << "Pierwszy wyraz nie zawiera sie w drugim!!"; } } return 0; }
Gdyby nie ten drugi if w pętli np. program potwierdziłby, że słowo "kot", zawiera sie w słowie "kombat". Lecz gdy dodałem tego if'a program wysypuje się gdy musi to sprawdzić. Mołgby mi ktoś pomóc? Pozdraiwam :) |
|
latajacaryba |
» 2017-06-05 20:10:52 Po pierwsze używaj typu string, nie c-string (c-string czyli tablicy char) Poczytaj sobie o stringach i zrób to tak: sprawdzasz, czy litera o indeksie n wyrazu 1 wystepuje w wyrazie 2. Jeśli tak to sprawdzasz kolejny Jeśli nie, to wypisujesz na ekran, że wyraz1 nie zawiera sie w wyrazie2 Jeśli wszystkie znaki wyraz1 wystepuja w wyraz2 to kończysz program. Kurs o stringach masz w dziale kursy. Przyda Ci sie funkcja napis.length(); ktory zwraca Ci ilość liter Jeśli nie będziesz mógł sobie poradzić, to tu masz kod (ale spróbuj najpierw sam)
#include <iostream> #include <string> using namespace std;
int main() { string slowo1; string slowo2; cin >> slowo1 >> slowo2; if( slowo1.length() > slowo2.length() ) { cout << "slowo 1 jest dluzsze od slowa 2 wiec sie w nim nie zawiera!\n"; return 0; } bool brakLitery = false; for( int j = 0; j < slowo1.length(); j++ ) { brakLitery = true; for( int k = 0; k < slowo2.length(); k++ ) { if( slowo1[ j ] == slowo2[ k ]; { brakLitery = false; break; } } if( brakLitery == true ) { cout << "wyraz1 nie zawiera sie w wyraz2\n"; return 0; } } cout << "zawiera sie"; return 0; }
|
|
Szkodnik78 Temat założony przez niniejszego użytkownika |
» 2017-06-05 20:55:44 @latajacaryba
Mam za zadanie zrobić to w tablicy char i problem jest w tym jednym błędzie.
Ale tak jak ty piszesz to nie będzie zawsze działać, ponieważ nie zawsze gdy wyraz2 zawiera wszyskie litery wyrazu1 to wyraz1 zawiera się w wyrazie2.
Chciałbym bardziej dowiedzieć się dlaczego tak jak ja to zrobiłem nie działa. Chodziło mi oto, żeby program sprawdzał czy x litera wyrazu1 jest taka sama jak y litery wyrazu2. Gdy nie to program dodaje do y+1 i sprawdza dalej. Jeśli tak dodaje do x+1 i y+1. Ale jeśli x>0, więc program przeszedł już do kolejnej litery i ta kolejna litera nie jest taka sama to wraca z x do stanu początkowego i sprawdza pierwszą litere wyrazu1 od ostatniej na której stanął program. Lecz tak jak już pisałem gdy dodałem w pętli drugiego if'a program sie wysypuje |
|
« 1 » |