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

Rozdział 32 - zadanie domowe

Ostatnio zmodyfikowano 2016-09-02 18:39
Autor Wiadomość
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
C/C++
#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;
}
P-151318
carlosmay
» 2016-09-02 12:13:46
Kolejność działań w funkcji wyswietl jest nieodpowiednia.

Zrób tak:
  • pobierz frazę od użytkonika.
  • w pętli pobieraj kolejne wiersze i porównuj z frazą użytkownika.
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:
C/C++
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';
        }
    }
}
P-151319
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.
C/C++
#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;
}
P-151320
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.


C/C++
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?
P-151322
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.

P-151341
« 1 »
  Strona 1 z 1