Podstawy obsługi plików - Zadanie domowe
Ostatnio zmodyfikowano 2014-08-16 21:20
Daedra Temat założony przez niniejszego użytkownika |
Podstawy obsługi plików - Zadanie domowe » 2014-08-16 01:21:35 #include <iostream> #include <string> #include <fstream> using namespace std;
bool szukaj( string Tekst, string szukanaFraza ) { cout << "test" << endl; size_t znalezionaPozycja = Tekst.find( szukanaFraza ); if( znalezionaPozycja == string::npos ) return false; else return true; }
bool wczytanie_pliku( string & chcia_plik ) { ifstream plik; plik.open( chcia_plik.c_str() ); if( !plik.good() ) { return false; } string tekst; while( getline( plik, tekst ) ) { cout << tekst << endl; } cout << endl; cout << "Jesli chcesz wyszukac fraze w tekscie podaj 'T', jesli nie, podaj 'N'" << endl; string podana; cin >> podana; cin.clear(); cin.sync(); if( podana == "T" ) { cout << "Podaj fraze ktora chcesz wyszukac:\n"; string a; getline( cin, a ); while( std::getline( plik, tekst ) ) { if( szukaj( tekst, a ) ) { cout << tekst << endl; } else continue; } } plik.close(); return true; }
int main() { do { cout << "Podaj nazwe pliku tekstowego ktory chcesz wczytac. Przykl.: 'x.txt' itp." << endl; cout << "Napisz 'end' jesli chcesz zakonczyc dzialanie programu." << endl; string chciany_plik; cin >> chciany_plik; cin.clear(); cin.sync(); string end = "end"; if( chciany_plik == end ) { return false; } cout << endl; if( !wczytanie_pliku( chciany_plik ) ) { cout << "Nie znaleziono" << endl; } } while( true ); }
Mój problem polega na tym, że gdy podaję frazę tekstu to nie zostaje wyszukana, program po prostu wraca do głównej funkcji i wykonuje pętlę od nowa: Podaj nazwe pliku tekstowego ktory chcesz wczytac. Przykl.: 'x.txt' itp. Napisz 'end' jesli chcesz zakonczyc dzialanie programu. x.txt
To jest pierwsza linijka tekstu To juz jest druga linijka tekstu A zas ta linijka bedzie trzecia linijka tekstu Oczywiscie ta jest czwarta, chyba tyle wystarczy
Jesli chcesz wyszukac fraze w tekscie podaj 'T', jesli nie, podaj 'N' T Podaj fraze ktora chcesz wyszukac: To Podaj nazwe pliku tekstowego ktory chcesz wczytac. Przykl.: 'x.txt' itp. Napisz 'end' jesli chcesz zakonczyc dzialanie programu. end
Process returned 0 (0x0) execution time : 17.930 s Press any key to continue.
Ktoś wie co robię źle? |
|
Jacob99 |
» 2014-08-16 10:51:11 Nigdzie nie zapisujesz wyszukanych pozycji. |
|
Daedra Temat założony przez niniejszego użytkownika |
» 2014-08-16 20:05:20 Mógłbym prosić o dokładniejsze wskazanie błędu? Nadal nie mogę sobie z tym poradzić, nie wiem jak mogę zapisać wyszukaną pozycję. Aby ją zapisać muszę wejść w ogóle do funkcji bool szukaj( string Tekst, string szukanaFraza ) , a właśnie ona sprawia mi głównym problem, na dowód czy funkcja jest w ogóle uruchamiana zamieściłem w niej couta, mowa o cout << "test" << endl; Nie rozumiem czemu się to nie wyświetla... |
|
Jacob99 |
» 2014-08-16 20:27:55 Trochę poprawiony kod: #include <iostream> #include <string> #include <fstream> #include <cstdlib> using namespace std;
size_t szukaj( string Tekst, string szukanaFraza ) { cout << "test" << endl; size_t znalezionaPozycja = Tekst.find( szukanaFraza ); if( znalezionaPozycja == string::npos ) return - 1; else return znalezionaPozycja; }
bool wczytanie_pliku( string & chcia_plik ) { ifstream plik; plik.open( chcia_plik.c_str() ); if( !plik.good() ) { return EXIT_FAILURE; } string tekst; while( getline( plik, tekst ) ) { cout << tekst << endl; } cout << endl; cout << "Jesli chcesz wyszukac fraze w tekscie podaj 'T', jesli nie, podaj 'N'" << endl; string podana; cin >> podana; cin.clear(); cin.sync(); if( podana == "T" ) { cout << "Podaj fraze ktora chcesz wyszukac:\n"; string a; getline( cin, a ); size_t pozycja = 0; while( getline( plik, tekst ) ) { pozycja = szukaj( tekst, a ); } if( pozycja == - 1 ) cout << "Nie znaleziono.!!!!" << endl; else cout << "Fraze " << a << " znaleziono na pozycji: " << pozycja << endl; } plik.close(); return true; }
int main() { do { cout << "Podaj nazwe pliku tekstowego ktory chcesz wczytac. Przykl.: 'x.txt' itp." << endl; cout << "Napisz 'end' jesli chcesz zakonczyc dzialanie programu." << endl; string chciany_plik; cin >> chciany_plik; string end = "end"; if( chciany_plik == end ) { return EXIT_SUCCESS; } cout << endl; if( !wczytanie_pliku( chciany_plik ) ) { cout << "Nie znaleziono" << endl; } } while( true ); }
Porównaj ze swoim i popoprawiaj jeszcze, żeby wykrywał dokładne pozycje itd. ... |
|
Daedra Temat założony przez niniejszego użytkownika |
» 2014-08-16 21:20:15 Edit: Problem nadal nierozwiązany. Edit2: Ktoś jest w stanie wyjaśnić czemu nie pojawia mi się cout << "test" << endl; występujące w funkcji "bool szukaj()"? I w jaki sposób mam dokładniej wykrywać pozycje? |
|
« 1 » |