Warunek który jest mało logiczny - pomoc w zrozumieniu.
Ostatnio zmodyfikowano 2014-09-12 14:25
plsbx Temat założony przez niniejszego użytkownika |
Warunek który jest mało logiczny - pomoc w zrozumieniu. » 2014-09-12 14:17:54 Witam robiłem dzisiaj temat związany z wyszukiwaniem fraz i zrobiłem zadanie domowe, ale zrobiłem je trochę dziwnie. Wiem jak to działa, ale nie rozumiem dlaczego warunek if działa odwrotnie niż ja chce. Chodzi o: if( znaleziona1 == std::string::npos && znaleziona2 == std::string::npos ) return true; Na logikę to nie powinno działać tak jak działa. Z tym zapisem program działa tak jak powinien, ale powinno być na odwrót. Przez kilka minut się zastanawiałem co jest nie tak z if( znaleziona1 != std::string::npos && znaleziona2 != std::string::npos ) return true; Co jest dużo logiczniejsze. Jeśli dwa warunki nie są std::string::npos to powinno oddać true. Co według tego zdania: "Jeżeli fraza bądź znak nie został odnaleziony w przeszukiwanym tekście to wówczas metoda find zwraca wartość std::string::npos." - http://cpp0x.pl/kursy/Kurs-C++/Poziom-3/Wyszukiwanie-frazy-w-tekscie/352 Powinno działać. No, ale nawet jeśli to powinno mi to oddać odwrotne. Tym czasem są one poprawne. Cały kod: #include <iostream> #include <string>
bool szukaj( std::string & tekst, std::string wyraz1, std::string wyraz2 ) { size_t znaleziona1 = tekst.find( wyraz1 ); if( znaleziona1 == std::string::npos ) return false; do { znaleziona1 = tekst.find( wyraz1, znaleziona1 + wyraz1.size() ); } while( znaleziona1 != std::string::npos ); size_t znaleziona2 = tekst.find( wyraz2 ); if( znaleziona2 == std::string::npos ) return false; do { znaleziona2 = tekst.find( wyraz2, znaleziona2 + wyraz2.size() ); } while( znaleziona2 != std::string::npos ); if( znaleziona1 == std::string::npos && znaleziona2 == std::string::npos ) return true; return false; }
void wypiszWynik( bool czyZnaleziono ) { if( czyZnaleziono ) std::cout << "Znaleziono" << std::endl; else std::cout << "Nie znaleziono" << std::endl; }
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; }
Jeśli komuś udało się przeczytać ten chaotyczny post to proszę o napisanie dlaczego tak jest. |
|
pekfos |
» 2014-09-12 14:25:16 Po co tu te pętle i tyle warunków? Masz tylko stwierdzić, czy obie frazy występują w tekście. |
|
« 1 » |