PawelBo Temat założony przez niniejszego użytkownika |
getline » 2011-01-22 23:21:37 ech... mam problem z programem... [c++] #include <iostream> #include <fstream> #include <cstdlib>
using namespace std;
int main(int argc, char *argv) { string wiersz; int licznik_1 = 0, licznik_2 = 0; char znak = '.'; ifstream plik_we_1 ("pierwszy.dat"); ifstream plik_we_2 ("drugi.dat"); while (!plik_we_1.eof()) { getline (plik_we_1, wiersz); licznik_1++; for (int i=0;i<=wiersz[wiersz.size()-1];i++){ if (wiersz==znak){ cout << "znak= " << wiersz << endl; licznik_1--; break; } cout << wiersz << endl; }
} cout << "licznik_1= " << licznik_1 << endl; plik_we_1.close(); plik_we_2.close(); system ("pause"); return 0; } [c++] |
|
dmx81 |
» 2011-01-22 23:54:11 wiersz == znak; wiersz[ i ] == znak;
if( plik.is_open() )
else
(i uzywaj znacznikow np code src = C + + , / code oczywiscie nawiasach kwadratowych i bez tych spacji) w ogole nie wiem czy dobrze masz petle napisana (nie powinno byc for( int i = 0; i < wiersz.size() - 1; i++ ) ?? |
|
PawelBo Temat założony przez niniejszego użytkownika |
cd » 2011-01-22 23:57:33 źle sie skopiowalo jest wiersz[ i ] == znak , problem w tym, ze jesli wiersz ze znakiem jest wiekszy od pozostalych to licznik_1 'wariuje"[/i]' |
|
dmx81 |
» 2011-01-23 00:02:48 moze napisz jeszcze raz, co chcesz osiagnac, dla mnie ta petla for wyglada podejrzanie, zobacz jak napisalem powyzej
bo ty masz warunek , ze i zaczynasz od 0, drugie, ze i<=wiersz[wiersz.size()-1 co oznacza, ze i ma miec wartosc mniejsza, niz komorka pamieci na pozycji wiersz.size()-1, a chyba chcesz aby bylo dla rozmiaru mniejszego, niz ilosc elementow w wiersz? |
|
PawelBo Temat założony przez niniejszego użytkownika |
cd » 2011-01-23 00:05:01 wczytuję plik wierszami i sprawdzam, czy nie zawiera jakiegos znaku w wierszu, jezeli zawiera to licznik-- |
|
dmx81 |
» 2011-01-23 00:05:08 #include <iostream> #include <fstream> #include <cstdlib>
using namespace std;
int main( int argc, char * argv ) { string wiersz; int licznik_1 = 0, licznik_2 = 0; char znak = '.'; ifstream plik_we_1( "pierwszy.dat" ); ifstream plik_we_2( "drugi.dat" ); if( plik_we_1.is_open() ) { while( !plik_we_1.eof() ) { getline( plik_we_1, wiersz ); licznik_1++; for( int i = 0; i <= wiersz.size() - 1; i++ ) { if( wiersz[ i ] == znak ) { cout << "znak= " << wiersz << endl; licznik_1--; break; } cout << wiersz << endl; } } cout << "licznik_1= " << licznik_1 << endl; plik_we_1.close(); plik_we_2.close(); system( "pause" ); } else cout << "blad otwarcia pliku"; return 0; }
sprawdz czy tak jest dobrze? |
|
PawelBo Temat założony przez niniejszego użytkownika |
:) » 2011-01-23 00:07:51 wyglada na good:)))) jeszcze sprawdze, danke |
|
dmx81 |
» 2011-01-23 00:09:17 troszke nie rozumiem twojego rozwiazania, byc moze juz pozna pora i dlatego, ale:
wczytujesz caly wiersz z pliku - licznik++ OK
sprawdzasz w tym wierszu, czy wystepuje jakis znak OK
jesli wystepuje znak, licznik-- OK
czyli powiedzmy wczytasz linie taka: 123...123 - sledzac twoj program, najpierw licznik jest = 0, dodamy 1 po wczytaniu wiersza, odejmiemy 3 po trzech kropkach, wynik = -2
powiedzmy bedziesz mial iles tam tych wierszy, to zeby wiedziec, ile razy wystapil znak, bedziesz musial od wyniku odjac (a raczej dodac? liczbe wierszy)
chyba ze powinienes jeden licznik zrobic na ilosc wierszy, inny na licznie wystapienia znaku?
// poza tym otwierasz 2 pliki, korzystasz z jednego, chyba ze to na potem... |
|
« 1 » 2 3 |