Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Rozdział 32] Podstawy obługi plików

Ostatnio zmodyfikowano 2015-01-18 02:43
Autor Wiadomość
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:
C/C++
#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?
P-125121
darko202
» 2015-01-17 22:31:58
masz
C/C++
string fraza;
string Tekst = "pliczek.txt";
...
getline( cin, fraza );
szukaj_wszystkich_fraz( Tekst, fraza ); //czyli szukaj_wszystkich_fraz( "pliczek.txt", fraza );

//a w tej procedurze szukasz frazy 
void szukaj_wszystkich_fraz( string & tekst, string & szukana_fraza )
{
    size_t znaleziona_pozycja = tekst.find( szukana_fraza ); //tekst = "pliczek.txt";
    ...
    // i tak dalej szukasz frazy w "pliczek.txt" a nie w pliku
    // co pewnie było treścią zadania
 

P-125123
luuuzik
Temat założony przez niniejszego użytkownika
» 2015-01-18 00:09:22
Poprawiłem, jednakże problem pozostał:/
P-125137
libed
» 2015-01-18 02:43:10
C/C++
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.
   
P-125146
« 1 »
  Strona 1 z 1