Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Rozdział 27] Źle działający warunek

Ostatnio zmodyfikowano 2014-10-20 10:33
Autor Wiadomość
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
C/C++
bool szukaj( std::string & tekst, std::string wyraz1, std::string wyraz2 ) //ZAD DOM
{
    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!"; //ZAD DOM
    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)
P-118831
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ę
P-118832
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;
P-118833
Memento96
» 2014-10-19 10:50:04
up && nir || bo ma sprawdzic oba wyrazy
P-118835
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
P-118837
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 :]
P-118987
« 1 »
  Strona 1 z 1