szukanie frazy od konca
Ostatnio zmodyfikowano 2016-08-14 15:25
zolty13 Temat założony przez niniejszego użytkownika |
szukanie frazy od konca » 2016-01-22 11:20:50 czesc otoz mam pytanie do kursu C++: jak to dokładnie działa i czemu podczas szukania frazy od końca jest w petli do while warunek if else a gdy szukamy od przodu to w petli do while jest tylko cout i przypisanie zmiennej (zrobilemto bez warunku i tez zwraca wartości )? Czy to co związane z koncami lancucha '\0'ktory jest na końcu i czytającod tylu nie mamy ograniczenia?
http://cpp0x.pl/kursy/Kurs-C++/Poziom-3/Wyszukiwanie-frazy-w-tekscie/352 dzięki wielkie za pomoc :) dopiero się przerzucam na obiekty i mam problemy jeszcze |
|
darko202 |
» 2016-01-22 12:33:53 jeśli pytasz o algorytm (bo nie jest to dla mnie jasne) void szukajWszystkichFrazOdKonca( std::string & tekst, std::string szukanaFraza ) { size_t znalezionaPozycja = tekst.rfind( szukanaFraza ); if( znalezionaPozycja == std::string::npos ) { std::cout << "Nie znaleziono frazy w tekscie" << std::endl; return; } do { std::cout << "Fraza zostala odnaleziona na pozycji " << znalezionaPozycja << std::endl; if( znalezionaPozycja >= szukanaFraza.size() ) znalezionaPozycja = tekst.rfind( szukanaFraza, znalezionaPozycja - szukanaFraza.size() ); else znalezionaPozycja = std::string::npos; } while( znalezionaPozycja != std::string::npos ); }
to ważny jest warunek wyjścia z pętli while( znalezionaPozycja != std::string::npos ); zapewniający odnalezienie ostatniego wystąpienia znaku szukamy nadal od początku |
|
zolty13 Temat założony przez niniejszego użytkownika |
» 2016-01-22 14:04:32 bardziej mi chodzi czemu jest tam if? tu mamy przypadek od początku szukania do { std::cout << "Fraza zostala odnaleziona na pozycji " << znalezionaPozycja << std::endl; znalezionaPozycja = tekst.find( szukanaFraza, znalezionaPozycja + szukanaFraza.size() ); } while( znalezionaPozycja != std::string::npos ); a tu od końca z funckja rfind() do { std::cout << "Fraza zostala odnaleziona na pozycji " << znalezionaPozycja << std::endl; if( znalezionaPozycja >= szukanaFraza.size() ) znalezionaPozycja = tekst.rfind( szukanaFraza, znalezionaPozycja - szukanaFraza.size() ); else znalezionaPozycja = std::string::npos; } while( znalezionaPozycja != std::string::npos ); czemu ten if jest konieczny, jaki mechanizm tym rzadzi :) gdy probowalem robic bez niego to było wszystko w porządku, dopóki slowo szukane nie pojawialo się na początku stringa wtedy zaczynal szalec i pisać w nieskonczonosc pozycje wystąpienia lancucha |
|
darko202 |
» 2016-01-22 15:29:05 |
|
zolty13 Temat założony przez niniejszego użytkownika |
» 2016-01-22 15:38:44 no tak znalazłem i widzie tyle ze jest nieokreślone zachowanie gdy teskt jest krótszy niż to czego w nim szukamy a nic o końcu szukania nie ma . Jest tez cos o wyjątkach ale tego nie rozumiem bo się ucze dopiero obiektowego. |
|
j23 |
» 2016-01-22 18:17:01 Jak nieokreślone? Jeśli rfind nie znajdzie tego, czego szuka, to zwróci npos, i nie ma znaczenia to, czy szukany tekst jest dłuższy od tekstu przeszukiwanego. |
|
zolty13 Temat założony przez niniejszego użytkownika |
» 2016-01-27 19:54:47 chodzi o to czy musze tworzyć if który warunkuje dojście do początku tekstu, czy nie musze tego robic. |
|
Maciekb |
» 2016-08-14 14:54:25 Sam mam ten sam problem, dlaczego rfind nie zwraca npos kiedy dojdzie do początku tesktu tylko pętla się zapętla? |
|
« 1 » 2 |