[Rozdział 27] Źle działający warunek
Ostatnio zmodyfikowano 2014-10-20 10:33
Spird Temat założony przez niniejszego użytkownika |
[Rozdział 27] Źle działający warunek » 2014-10-19 01:25:16 Witajcie, próbowałem rozwiązać zadanie z podanego rozdziału. Udało mi się stworzyć coś takiego bool szukaj( std::string & tekst, std::string wyraz1, std::string wyraz2 ) { size_t szukanie = tekst.find( wyraz1 ); size_t szukanie2 = tekst.find( wyraz2 ); if( szukanie && szukanie2 == std::string::npos ) return false; else return true; }
int main() { std::string napis = "Zadanie domowe z kursu C++ (http://cpp0x.pl) - najlepszy kurs C++ w Internecie!"; wypiszWynik( szukaj( napis, "ada", "kurs" ) ); wypiszWynik( szukaj( napis, "ada", "taki" ) ); wypiszWynik( szukaj( napis, "C++", "cpp0x" ) ); wypiszWynik( szukaj( napis, "C#", "cpp0x" ) ); return 0; }
Jednak po skompilowaniu, wynikiem jest Znaleziono Nie znaleziono Znaleziono Znaleziono Gdzie leży problem? (Imho wydaje mi się że jest zbyt prosty, ale kierowałem się zasadą KISS) |
|
Memento96 |
» 2014-10-19 10:07:33 Hmm.. chyba mam tak samo (nie podałeś funkcji wypisz wynik, ale mi działa poprawnie. Pokaż tą funkcję |
|
Jacob99 |
» 2014-10-19 10:10:15 if( szukanie && szukanie2 == std::string::npos ) |
Ten warunek jest zły, bo należy go rozumieć jako : jeżeli(szukanie jest większe od zera i szukanie2 równa się nie znaleziono) zwróć fałsz. Powinno być if( szukanie == std::string::npos || szukanie2 == std::string::npos ) return false; |
|
Memento96 |
» 2014-10-19 10:50:04 up && nir || bo ma sprawdzic oba wyrazy |
|
Rashmistrz |
» 2014-10-19 11:07:05 @Memento96 Twój "@up" kolega ma dobrze, funkcja ta powinna zwracać fałsz jeśli którakolwiek z tych fraz będzie nieznaleziona, a nie kiedy obie będą nieznalezione, bo wtedy gdy znajdzie przynajmniej jedną frazę z tych to zwróci fałsz prawdę. O_o //Ciekawostka: std::string::npos == - 1 |
|
Spird Temat założony przez niniejszego użytkownika |
» 2014-10-20 10:33:58 Ok, teraz program działa jak należy.
Dzięki za pomoc :] |
|
« 1 » |