BartC Temat założony przez niniejszego użytkownika |
[Rozdział 32] Mały problem z zadaniem » 2015-06-15 17:40:00 Wykrywa błąd w 46 linijce: no match for 'operator<<' in std::operator<< [...] #include <iostream> #include <fstream> #include <string>
using namespace std;
bool wyswietlplik( string nazwapliku ) { ifstream plik; plik.open( "C:\\Klasa.txt" ); if( !plik.good() ) return false; string wypisaniepliku; getline( plik, wypisaniepliku ); cout << wypisaniepliku << endl; plik.close(); return true; } void sprawdzenie( string nazwapliku, string wyraz ) { ifstream plik; plik.open( "C:\\Klasa.txt" ); if( !plik.good() ) cout << "Udalo sie wczytac plik. " << endl; size_t znalezionapozycja = nazwapliku.find( wyraz ); if( znalezionapozycja == string::npos ) cout << "Nie znaleziono wyrazu w tekscie. " << endl; else { do { cout << "Znaleziony wyraz jest na pozycji " << znalezionapozycja << endl; znalezionapozycja = nazwapliku.find( wyraz, znalezionapozycja + wyraz.size() ); } while( znalezionapozycja != string::npos ); } plik.close(); }
int main() { string wyraz; cout << "Tekst: " << endl << endl; wyswietlplik( "C:\\Klasa.txt" ); cin >> wyraz; cout << "Podaj wyraz znajdujacy sie w teksie: " << sprawdzenie( "C:\\Klasa.txt", wyraz ); }
|
|
BadBullPL |
» 2015-06-15 17:46:35 tak to powinno wyglądać cout << "Podaj wyraz znajdujacy sie w teksie: "; sprawdzenie( "C:\\Klasa.txt", wyraz );
|
|
BartC Temat założony przez niniejszego użytkownika |
» 2015-06-15 18:48:16 Ok teraz już działa. Jednak program nie działa tak jak powinien czyli wpisze nie ważne jaki wyraz zawsze pokazuje, że nie ma takiej frazy w tekscie. |
|
BadBullPL |
» 2015-06-15 21:52:44 poprawione i działa wszystko #include <iostream> #include <fstream> #include <string> using namespace std;
void sprawdzenie( string & tekst, string szukane, int nr_linii, bool & czy ) { size_t szukaj = tekst.find( szukane ); if( szukaj != string::npos ) { cout << "Slowo zostalo odnalezione na pozycji " << szukaj << " w lini nr: " << nr_linii << endl; czy = true; } }
int main() { ifstream plik; plik.open( "plik.txt", ios::in ); string tekst; cout << "Podaj wyraz znajdujacy sie w tekscie: "; string szukane; getline( cin, szukane ); int nr_linii = 1; bool czyByla = false; while( !plik.eof() ) { getline( plik, tekst ); sprawdzenie( tekst, szukane, nr_linii, czyByla ); nr_linii++; } plik.close(); if( czyByla == false ) cout << "W pliku nie bylo slowa"; return 0; }
a co do @down zeedytuj post o nowe uwagi jeśli takowe posiadasz żeby nie wprowadzał w błąd. |
|
libed |
» 2015-06-16 01:43:22 @up - Czytasz co drugą linijkę - Podawane jest zła pozycja odnalezionego wyrazu - aż się prosi, żeby funkcja sprawdzająca zwracała bool - funkcja "sprawdz" powinna zajmować się wyłącznie sprawdzaniem a nie wszystkim po kolei
|
|
BartC Temat założony przez niniejszego użytkownika |
» 2015-06-16 20:33:40 Dużo namieszanie w tych komentarzach, niestety nadal nie rozgryzłem swojego programu. Mam coś takiego #include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std;
void sprawdzenie( string nazwapliku, string wyraz ) { size_t znalezionapozycja = nazwapliku.find( wyraz ); if( znalezionapozycja != string::npos ) { cout << "Znaleziony plik jest na pozycji " << znalezionapozycja << endl; } }
int main() { ifstream plik; plik.open( "C:\\Klasa.txt" ); string tekst; getline( plik, tekst ); cout << tekst << endl; cout << "Podaj wyraz znajdujacy sie w tekscie: "; string szukane; getline( cin, szukane ); getline( plik, tekst ); sprawdzenie( tekst, szukane ); plik.close(); } :/ |
|
BadBullPL |
» 2015-06-16 20:50:32 Twój program działa jedynie na plikach które mają jedną linijke nie wiem czy oto chodziło |
|
BartC Temat założony przez niniejszego użytkownika |
» 2015-06-16 21:57:01 Chodziło o to: "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." |
|
« 1 » 2 |