lekcja 32 - pytanie
Ostatnio zmodyfikowano 2014-01-08 14:52
kleczaj Temat założony przez niniejszego użytkownika |
lekcja 32 - pytanie » 2014-01-08 00:32:46 Zadanie domowe 32. 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. Rozwiązałem pracę domową, ale drażni mnie jeden szczegół. Mógłby mi ktoś podpowiedzieć jak zrobić żeby komunikat o tym, że nie znaleziono w tekście danego słowa wyświetlał się tylko raz a nie tyle razy ile jest linijek tekstu? Oto mój kod: #include <string> #include <iostream> #include <fstream>
void szukajWszystkichFraz( std::string & tekst, std::string szukanaFraza ) { size_t znalezionaPozycja = tekst.find( szukanaFraza ); if( znalezionaPozycja != std::string::npos ) std::cout << tekst << std::endl; else std::cout << "nie znaleziono" << std::endl; }
bool wczytajPlik( std::string nazwaPliku ) { std::ifstream plik; plik.open( nazwaPliku.c_str() ); if( !plik.good() ) return false; while( plik.good() ) { std::cout << "Podaj tekst ktory chcesz wyszukac\n"; std::string a; std::cin >> a; std::string wiersz; while( std::getline( plik, wiersz ) ) szukajWszystkichFraz( wiersz, a ); } return true; }
int main() { if( wczytajPlik( "C:/odczyt.txt" ) != 1 ) std::cout << "Nie udalo sie otworzyc pliku!" << std::endl; return 0; }
|
|
alixir |
» 2014-01-08 07:30:10 Najprościej usuń kawałek kodu: else std::cout << "nie znaleziono" << std::endl;
Oczywiście wtedy komunikat nie pojawi się ani razu, ale wydaje mi się że nie było takiego założenia w treści zadania. A jeśli chciałbyś to przerobić, to można zamierzony cel osiągnąć np. tak: #include <string> #include <iostream> #include <fstream>
bool szukajWszystkichFraz( std::string & tekst, std::string szukanaFraza ) { size_t znalezionaPozycja = tekst.find( szukanaFraza ); if( znalezionaPozycja != std::string::npos ) return true; else return false; }
bool wczytajPlik( std::string nazwaPliku ) { bool znaleziono = false; std::ifstream plik; plik.open( nazwaPliku.c_str() ); if( !plik.good() ) return false; while( plik.good() ) { std::cout << "Podaj tekst ktory chcesz wyszukac\n"; std::string a; std::cin >> a; std::string wiersz; while( std::getline( plik, wiersz ) ) if( szukajWszystkichFraz( wiersz, a ) ) { std::cout << wiersz << std::endl; znaleziono = true; } } if( !znaleziono ) std::cout << "Nie znaleziono" << std::endl; plik.close(); return true; }
int main() { if( wczytajPlik( "odczyt.txt" ) != 1 ) std::cout << "Nie udalo sie otworzyc pliku!" << std::endl; return 0; }
|
|
kleczaj Temat założony przez niniejszego użytkownika |
» 2014-01-08 14:52:36 Jest tak jak potrzebowałem. Dziękuje za pomoc ;) |
|
« 1 » |