Rozdział 32. Zadanie domowe
Ostatnio zmodyfikowano 2016-01-10 22:31
fearlay Temat założony przez niniejszego użytkownika |
Rozdział 32. Zadanie domowe » 2016-01-10 21:56:26 Cześć, zrobiłem zadanie domowe z rozdziału 32. jednak nie jestem zadowolony ze sposobu wykonania. Niestety nie znalazłem lepszego rozwiązania... Treść: Napisz program, który odczyta zawartość pliku, a następnie wypisze na ekranie tylko te wiersze, w których znajduje się wyraz wprowadzony przez użytkownika. Mój kod: #include <iostream> #include <fstream> #include <string>
bool wyswietlZawartoscPliku( std::string sNazwaPliku, std::string SzukanaFraza ) { std::ifstream plik; plik.open( sNazwaPliku.c_str() ); if( !plik.good() ) return false; std::string wiersz; int i = 1; while( std::getline( plik, wiersz ) ) { size_t znalezionaPozycja = wiersz.find( SzukanaFraza ); if( znalezionaPozycja > 500 ) std::cout << i << ". Brak" << std::endl; else std::cout << i << ". " << wiersz << std::endl; i++; } plik.close(); return true; }
int main() { std::string SzukanaFraza; std::cin >> SzukanaFraza; if( !wyswietlZawartoscPliku( "moje.txt", SzukanaFraza ) ) std::cout << "Nie udalo sie otworzyc pliku o podanej nazwie." << std::endl; return 0; }
Przykładowy log z programu: Huawei 1. Huawei Ascend P7 is company's premium handset launched in June 2014. 2. Brak 3. Premium Flagship of the company Huawei, providing just one upgrade 4. Brak 5. still Huawei didn't put it in the list that they will upgrade. 6. Brak 7. So we are requesting to put the Huawei Ascend P7 among the list they will upgrade to Marshmallow.
Dlaczego jestem niezadowolony? Otóż odkryłem, że jak dane słowo nie występuje w wierszu, to zmienna typu size_t znalezionaPozycja przyjmuje wartość dokładnie 4294967295. Nie wiem w sumie dlaczego, ale tak jest. Zatem za każdym razem sprawdzam czy znalezionaPozycja jest większa niż np. 500 (generalnie więcej niż posiada wiersz). Przyznam szczerze, że niezbyt podoba mi się ten pomysł... Czy ktoś może naprowadzić na coś lepszego? Dlaczego jak podana fraza nie występuje w wierszu to znalezionaPozycja przyjmuje taką kosmiczną wielkość? Czy tak jest za każdym razem? Pozdrawiam :) |
|
mateczek |
» 2016-01-10 22:31:40 if( znalezionaPozycja != string::npos) // jak ma być ładniej to w tym stylu |
|
« 1 » |