Zadanie domowe z lekcji 32. Działa ale mam pewien problem.
Ostatnio zmodyfikowano 2016-11-20 00:50
MDK Temat założony przez niniejszego użytkownika |
Zadanie domowe z lekcji 32. Działa ale mam pewien problem. » 2016-11-19 18:54:37 Mam problem z warunkiem w pętli for. Chociaż zadanie działa tak, jak powinno, wiem, że to nie jest dobre rozwiązanie. W tej chwili mam to tak: for( znalezionaPoz; znalezionaPoz <= 100; znalezionaPoz++ ) - pętla pozwala mi wprawdzie wyszukać zadaną frazę w tekście, jednak długość wiersza jest ustawiona na sztywno, w przykładzie na 100. Na pewno nie jest to optymalne rozwiązanie. Choć działa szybko(ale nie optymalnie szybko), to problem z wyszukiwaniem wystąpi jeśli wiersz jest dłuższy niż np. podane 100 znaków. Jednak jeśli próbuję zrobić tak: for( znalezionaPoz; znalezionaPoz != string::npos; znalezionaPoz++ ) , co jak sądzę powinno automatycznie kończyć warunek po napotkaniu końca wiersza, dzieje się inaczej. Pętla kończy się chyba dopiero, gdy przeleci cały rozmiar typu size_t, całkowicie ignorując koniec wiersza i trwa to bardzo długo. Jak napisać warunek, żeby po dojściu do końca wiersza pętla się kończyła? #include <iostream> #include <fstream> #include <string> using namespace std;
void wyswietl( string nazwa, string szukanaFraza ) { ifstream plik; string wiersz; size_t znalezionaPoz; plik.open( nazwa ); while( getline( plik, wiersz ) ) { znalezionaPoz = wiersz.find( szukanaFraza ); for( znalezionaPoz; znalezionaPoz <= 100; znalezionaPoz++ ) { if( znalezionaPoz == wiersz.find( szukanaFraza, znalezionaPoz ) ) cout << wiersz << endl; } } plik.close(); }
int main() { string fraza = "cpp"; wyswietl( "cpp0x.txt", fraza ); return 0; }
|
|
mateczek |
» 2016-11-19 19:20:25 #include <iostream> #include <fstream> #include <string> using namespace std;
void wyswietl( string nazwa, string szukanaFraza ) { ifstream plik( nazwa ); string wiersz; size_t znalezionaPoz; size_t jmp = szukanaFraza.size(); while( getline( plik, wiersz ) ) { for( znalezionaPoz = wiersz.find( szukanaFraza ); znalezionaPoz != string::npos; znalezionaPoz = wiersz.find( szukanaFraza, znalezionaPoz + jmp ) ) { cout << wiersz << endl; } } }
int main() { string fraza = "cpp"; wyswietl( "cpp0x.txt", fraza ); return 0; }
A jak chcesz tylko sprawdzić czy w wierszu występuje choć raz to tak !!! #include <iostream> #include <fstream> #include <string> using namespace std;
void wyswietl( string nazwa, string szukanaFraza ) { ifstream plik( nazwa ); string wiersz; size_t znalezionaPoz; while( getline( plik, wiersz ) ) { znalezionaPoz = wiersz.find( szukanaFraza ); if( znalezionaPoz != string::npos ) { cout << wiersz << endl; } } }
int main() { string fraza = "cpp"; wyswietl( "cpp0x.txt", fraza ); return 0; }
|
|
MDK Temat założony przez niniejszego użytkownika |
» 2016-11-20 00:50:29 Ok, dzięki! Zamykam. |
|
« 1 » |