[Rozdział 32] Podstawy obługi plików
Ostatnio zmodyfikowano 2015-01-18 02:43
luuuzik Temat założony przez niniejszego użytkownika |
[Rozdział 32] Podstawy obługi plików » 2015-01-17 21:28:34 Witam, rozwiązywałem zadanie domowe i mam problem: program raz wyszukuje frazy a raz nie. Oto kod: #include <iostream> #include <fstream> #include <string> using namespace std;
bool wyswietlZawartoscPliku( string sNazwaPliku ) { ifstream plik; plik.open( "pliczek.txt" ); if( !plik.good() ) return false; string wiersz; while( std::getline( plik, wiersz ) ) cout << wiersz << endl; plik.close(); return true; }
void szukaj_wszystkich_fraz( string & tekst, string & szukana_fraza ) { size_t znaleziona_pozycja = tekst.find( szukana_fraza ); if( znaleziona_pozycja == string::npos ) { cout << "Fraza nie zostala znaleziona!" << endl; return; } do { cout << "Fraza zostala znaleziona na pozycji: " << znaleziona_pozycja << endl; znaleziona_pozycja = tekst.find( szukana_fraza, znaleziona_pozycja + szukana_fraza.size() ); } while( znaleziona_pozycja != string::npos ); } int main() { string fraza; ifstream plik; string Tekst = "pliczek.txt"; if( !wyswietlZawartoscPliku( "pliczek.txt" ) ) std::cout << "Nie udalo sie otworzyc pliku o podanej nazwie." << std::endl; cout << "Jaka fraze wyszukac w pliku?" << endl; getline( cin, fraza ); szukaj_wszystkich_fraz( Tekst, fraza ); return 0; }
Ktoś mógłby mi podpowiedzieć, gdzie popełniłem błąd? |
|
darko202 |
» 2015-01-17 22:31:58 masz string fraza; string Tekst = "pliczek.txt"; ... getline( cin, fraza ); szukaj_wszystkich_fraz( Tekst, fraza );
void szukaj_wszystkich_fraz( string & tekst, string & szukana_fraza ) { size_t znaleziona_pozycja = tekst.find( szukana_fraza ); ...
|
|
luuuzik Temat założony przez niniejszego użytkownika |
» 2015-01-18 00:09:22 Poprawiłem, jednakże problem pozostał:/ |
|
libed |
» 2015-01-18 02:43:10 typedef unsigned uint;
bool LoadContent( const string & file_path, vector < string >& storage ) { bool res = false; ifstream file( file_path ); if( file.is_open() ) { while( getline( file, line ) storage.push_back( line ) res = true; } return res; }
void ShowContent( const vector < string >& source ) { for( auto const & line: source ) cout << line }
void FindPhrase( const vector < string >& source, const string & phrase ) { vector < uint > total; for( uint idx = 0; idx < source.size(); ++idx ) { uint pos = 0; while(( pos = line.find( phrase, pos ) ) != string::npos ) { total.push_back( pos ); pos += phrase.length(); } cout << "Znaleziono tekst na pozycjach: \n"; for( uint idx2: total ) cout << "\t" << idx << ":" << idx2 << '\n"; } int main( int argc, char ** argv ) { if( argc > 1 ) { vector < string > data; if( LoadContent( argv[ 1 ], data ) ) { ShowContent( data ); string to_find; cout << "Podaj tekst do znalezienia: "; getline( cin, to_find ); FindPhrase( data, to_find ); } return 0; }
Pisane z palca więc mogą być babole ;) PS. Zamiast kopiować linie prze getline lepiej chyba użyć iteratorów i std::copy. |
|
« 1 » |