Rozdział 27 zadanie domowe - błędny wynik
Ostatnio zmodyfikowano 2015-12-09 15:46
Lich555 Temat założony przez niniejszego użytkownika |
Rozdział 27 zadanie domowe - błędny wynik » 2015-12-08 20:01:28 Witam. Mam niewielki problem przy zadaniu domowym z rozdziały pt. "Wyszukiwanie frazy w tekście". Jego treść brzmi: "Uzupełnij funkcję poniższego programu tak, aby zwróciła wartość true tylko wtedy gdy oba wyrazy występują w zadanym łańcuchu tekstowym:". Mój program wygląda następująco: #include <iostream> #include <string>
using namespace std;
bool szukaj( string & tekst, string wyraz1, string wyraz2 ) { size_t znalezionaPozycja = tekst.find( wyraz1 ); size_t znalezionaPozycja1 = tekst.find( wyraz2 ); if( znalezionaPozycja1 && znalezionaPozycja == true ) { cout << "Znaleziono" << endl; } else cout << "Nie znaleziono" << endl; return false; }
void wypiszWynik( bool czyZnaleziono ) { if( czyZnaleziono ) cout << "Znaleziono" << endl; else cout << "Nie znaleziono" << endl; }
int main() { 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; }
Wynik tego programu jest następujący: Znaleziono Nie znaleziono Znaleziono Nie znaleziono Nie znaleziono Nie znaleziono Nie znaleziono Nie znaleziono Jak widać początkowe 4 odpowiedzi są poprawne, ale czemu dalej mi wyskakują kolejne 4 zbędne odpowiedzi "Nie znaleziono"? Wynik powinien być taki: Znaleziono Nie znaleziono Znaleziono Nie znaleziono |
|
BezPrzewodowy |
» 2015-12-08 20:10:55 Funkcja szukaj zawsze zwraca wartość false . Do tego zarówno funkcja szukaj jak i wpisz wyniki wyświetlają komunikat, czy znaleziono frazę. Dlatego na ekranie pojawia się 8 odpowiedzi do 4 wywołań funkcji szukaj. |
|
carlosmay |
» 2015-12-08 20:25:39 if( znalezionaPozycja1 && znalezionaPozycja == true )
ten warunek też jest źle sformułowany. |
|
Lich555 Temat założony przez niniejszego użytkownika |
» 2015-12-08 22:58:46 Ok, mam taki zapis, który działa. bool szukaj( string & tekst, string wyraz1, string wyraz2 ) { size_t z = tekst.find( wyraz1 ); size_t z1 = tekst.find( wyraz2 ); if(( z != string::npos ) &&( z1 != string::npos ) ) { return true; } else return false; return false; }
Niech mi ktoś teraz wytłumaczy działanie tego. npos oznacza w tym przypadku, że czegoś nie ma w tekście, nie znaleziono szukanej frazy lub znaku o ile się nie mylę. Więc tutaj można wyczytać "jeśli z i z1 jest różne od npos, czyli szukana treść została znaleziona, to zwróć true. Na końcu return false oznacza zaś, że zwróć false tylko i wyłącznie wtedy, kiedy z i z1 będą różne od npos. Więc jaka jest różnica, czy na końcu wstawimy return false czy return true? @Edit Ok, chyba rozumiem, po prostu ostatnie return false jest zbędne... Mój mózg już nie pracuje tyle godzin i takie głupie problemy mam :P |
|
carlosmay |
» 2015-12-09 00:58:31 Więc jaka jest różnica, czy na końcu wstawimy return false czy return true? |
Tak jak napisałeś. Jest zbędne. Jeśli funkcja zwraca wartości, to należy obstawić return 'ami wszystkie miejsca wyjścia z funkcji. W tym przypadku są tylko dwa if() return wartosc; else return wartosc;
|
|
Lich555 Temat założony przez niniejszego użytkownika |
» 2015-12-09 15:46:36 Ok, dzięki wielkie. Dopiero teraz pojąłem do końca return. |
|
« 1 » |