Rozdział 32 - zadanie domowe
Ostatnio zmodyfikowano 2016-09-02 18:39
Speedwaymonia93 Temat założony przez niniejszego użytkownika |
Rozdział 32 - zadanie domowe » 2016-09-02 11:25:31 Maki problem z zadaniem domowym. Otóż program nie chce mi wyswietlic wiersza w ktorym znajduje sie podany przez uzytkownika wyraz. Nie mam pojecia dlaczego tak sie dzieje. Prosze o pomoc #include <iostream> #include <string> #include <fstream>
bool wyswietl( std::string nazwa_pliku ) { std::ifstream plik; plik.open( nazwa_pliku.c_str() ); if( !plik.good() ) return false; std::string wiersz; while( std::getline( plik, wiersz ) ) std::cout << wiersz << std::endl; std::string fraza; std::cout << "\n Podaj fraze jaka mam znalezc w tekscie pliku" << std::endl; std::cin >> fraza; while( std::getline( plik, wiersz ) ) { if( wiersz.find( fraza ) != std::string::npos ) std::cout << wiersz << std::endl; else std::cout << "Nie odnaleziono frazy!" << std::endl; } plik.close(); return true; }
int main() { if( !wyswietl( "D:/CodeBlocks/ZADANIA DOMOWE/POZIOM 4/lekcja 32/plik1.txt" ) ) std::cout << "Nie udalo sie wyswietlic pliku o podanej nazwie" << std::endl; return 0; }
|
|
carlosmay |
» 2016-09-02 12:13:46 Kolejność działań w funkcji wyswietl jest nieodpowiednia. Zrób tak: Ewentualnie zapisywać wyrazy w jakimś kontenerze np. std::vector<>i na koniec wyszukać w nim frazę (słowo) używając funkcji find() z <algorithm>. Coś w tym stylu: void findAndWriteWordInFile( const string & filename ) { vector < string > lines; string line; ifstream fin( filename ); if( fin.is_open() ) { while( getline( fin, line ) ) { lines.push_back( line ); } } string word; getline( cin, word ); for( auto const & line: lines ) { if( line.find( word ) != string::npos ) { cout << line << '\n'; } } } |
|
Speedwaymonia93 Temat założony przez niniejszego użytkownika |
» 2016-09-02 14:13:42 Trochę poprawiłam kod ale nadal nie działa tak jak powinien. Zamiast wypisywac mi tylko te wiersze które zawieraja fraze ot wypisuje jeszcze kilka razy ze frazy nie znaleziono. #include <iostream> #include <string> #include <fstream>
bool wyswietl( std::string nazwa_pliku ) { std::ifstream plik; plik.open( nazwa_pliku.c_str() ); if( !plik.good() ) return false; std::string fraza; std::cout << "\n Podaj fraze jaka mam znalezc w tekscie pliku" << std::endl; std::cin >> fraza; std::string wiersz; while( std::getline( plik, wiersz ) ) { if( wiersz.find( fraza ) == std::string::npos ) std::cout << "Nie odnaleziono frazy!" << std::endl; else { std::cout << wiersz << std::endl; } } plik.close(); return true; }
int main() { if( !wyswietl( "D:/CodeBlocks/ZADANIA DOMOWE/POZIOM 4/lekcja 32/plik1.txt" ) ) std::cout << "Nie udalo sie wyswietlic pliku o podanej nazwie" << std::endl; return 0; }
|
|
karambaHZP |
» 2016-09-02 14:37:48 Zamiast wypisywac mi tylko te wiersze które zawieraja fraze ot wypisuje jeszcze kilka razy ze frazy nie znaleziono. |
while( std::getline( plik, wiersz ) ) { if( wiersz.find( fraza ) == std::string::npos ) std::cout << "Nie odnaleziono frazy!" << std::endl; else { std::cout << wiersz << std::endl; } } |
Tak mu każesz. PS: Czytasz odpowiedzi? |
|
Speedwaymonia93 Temat założony przez niniejszego użytkownika |
» 2016-09-02 18:39:00 karambaHZP Czytam odpowiedzi ale nie zawsze je rozumiem. Carlosmay dziękuję za pomoc :) Już sobie poradziłam. Nie za bardzo zrozumiałam tego drugiego sposobu co mi zaproponowałeś ale pierwszy tak, posiedziałam trochę nad kodem, pokombinowałam i wyszło. To zamykam temat.
|
|
« 1 » |