Rozdział 4. Lekcja 34. Zadanie domowe.
Ostatnio zmodyfikowano 2016-12-19 18:24
NukeeMann Temat założony przez niniejszego użytkownika |
Rozdział 4. Lekcja 34. Zadanie domowe. » 2016-12-16 20:54:54 Witam. Mam pewien problem dotyczacy zadania domowego z rozdziału 34. Otóż nie wiem, jak wymusić na programie przejście do kolejnego wiersza we wczytanym pliku po napotkaniu znaku. Prosiłbym o wytłumaczenie w jak najprostszy sposób, na podstawie wiedzy jaką powinienem mieć po przejściu dotychczasowych rozdziałów. #include<iostream> #include<fstream> #include<string>
using namespace std;
bool czyNapotkanoZnakNowegoWiersza( std::ifstream & plik ) { char cZnak; for(;; ) { plik.clear(); cZnak = plik.peek(); if( plik.fail() || plik.bad() ) return false; if( !isspace( cZnak ) ) return false; plik.get( cZnak ); if( plik.fail() || plik.bad() ) return false; if( cZnak == '\n' ) { return true; } } }
bool wczytajplik( string dokument ) { int suma = 0; ifstream plik; plik.open( "dokument.txt" ); if( !plik.good() ) return false; string wiersz; int liniawiersza = 1; while( !plik.eof() ) { if( czyNapotkanoZnakNowegoWiersza( plik ) ) { cout << suma << endl; suma = 0; liniawiersza++; } int iLiczba; plik >> iLiczba; if( plik.fail() ) { plik.clear(); char znak; plik >> znak; if( plik.fail() ) { cout << "Nie udalo sie wczytaj zawartosci wiersza." << endl; return false; } else { suma = 0; cout << "Nie udalo sie wczytac wiersza " << liniawiersza << endl; } } else suma += iLiczba; } plik.close(); cout << "Suma wczytanych liczb to: " << suma << endl; return true; }
int main() { string plik = "dokument.txt"; if( !wczytajplik( plik ) ) cout << "Nie udalo sie wczytac pliku."; return 0; }
|
|
czaffik |
» 2016-12-19 18:24:16 Skąd te zadanie i jaką wiedzę powinieneś posiadać? Jak nie możesz czegoś zrobić to rozbij problem, sprawdź np jak przejść do nowego wiersza po napotkaniu jakiegoś znaku dla stringa: bool czyNapotkanoZnak( string napis, int pozycja, char znak ) { if( napis[ pozycja ] == znak ) return true; return false; }
int numerNowegoWiersza( string napis, int pozycja ) { for( int i = pozycja; i < napis.size(); i++ ) { if( napis[ i ] == '\n' ) return i; } return napis.size(); }
int main() { string napis = "costm\nmatsoc\n"; for( int i = 0; i < napis.size(); i++ ) { cout << napis[ i ] << " "; if( czyNapotkanoZnak( napis, i, 's' ) ) { cout << "\nna miejscu " << i << " w napisie napotkano znak nowego wiersza, przechodze do nowego wiersza \n"; i = numerNowegoWiersza( napis, i ); } } return 0; }
a potem to jakoś przerób na pliki. No i pytanie (być może coś źle zrozumiałem) po co przechodzić do nowego wiersza po napotkaniu znaku nowego wiersza? |
|
« 1 » |