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

Rozdział 32 zadanie domowe

Ostatnio zmodyfikowano 2016-01-24 13:09
Autor Wiadomość
ghost25
Temat założony przez niniejszego użytkownika
Rozdział 32 zadanie domowe
» 2016-01-18 19:40:39
Treść zadania: Napisz program, który odczyta zawartość pliku, a następnie wypisze na ekranie tylko te wiersze, w których znajduje się wyraz wprowadzony przez użytkownika.

Mój kod:

C/C++
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
    ifstream plik;
    string wyraz;
    int iloscwierszy = 0;
    plik.open( "D:/test.txt" );
    while( getline( plik, wyraz ) )
         iloscwierszy++;
   
    cout << endl << "Jaki wyraz wyszukac?" << endl;
    cin >> wyraz;
    string wiersz[ iloscwierszy ];
    for( int i = 0; i <= iloscwierszy; i++ )
    {
        getline( plik, wiersz[ i ] );
        size_t znalezionapozycja = wiersz[ i ].find( wyraz );
        if( znalezionapozycja != std::string::npos )
             cout << wiersz[ i ];
       
    }
    plik.close();
    return 0;
}

Problem: Po wpisaniu słowa do wyszukania wyświetla się komunikat systemowy: Program <nazwa pliku> przestał działać. Kompilator nie wyświetla żadnych błędów.
P-143747
Gibas11
» 2016-01-18 20:02:29
string wiersz[ iloscwierszy ];
„iloscwierszy” nie jest stałą a tak się nie alokuje tablic o zmiennym rozmiarze.

Ps. tak nie byłoby prościej?
C/C++
#include <string>
#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    ifstream in( "file.txt" );
    string werse, word;
   
    cin >> word;
   
    while( getline( in, werse ) )
    if( werse.find( word ) != string::npos )
         cout << werse << endl;
   
    return 0;
}
Program oczywiście nie wykrywa czy słowo jest oddzielone od innych (teraz przy szukaniu "placki", zaliczy też "plackisss"), ale to chyba nie jest szczególnie potrzebne.
P-143750
Lich555
» 2016-01-24 13:09:25
Albo coś takiego :P
C/C++
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

bool odczytzawplik( string iwyraz )
{
    ifstream plik;
    plik.open( "C:/Users/Kacper Zięba/Desktop/C++/Podstawy obsługi plików/Zadanie domowe 1/dok1.txt" );
    if( !plik.good() )
         return false;
   
    string wiersz;
    while( getline( plik, wiersz ) )
    if( wiersz.find( iwyraz ) != string::npos )
         cout << wiersz << endl;
   
    return true;
}

int main()
{
    string wyraz;
    cout << "Wprowadz wyraz by wyswietlic wiersze w ktorych sie on znajduje: " << endl;
    cin >> wyraz;
    cout << endl;
    if( !odczytzawplik( wyraz ) )
         cout << "Nie udalo sie otworzyc pliku" << endl;
   
    return 0;
}
P-143956
« 1 »
  Strona 1 z 1