Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

szukanie frazy od konca

Ostatnio zmodyfikowano 2016-08-14 15:25
Autor Wiadomość
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
P-143876
darko202
» 2016-01-22 12:33:53
jeśli pytasz o algorytm (bo nie jest to dla mnie jasne)
C/C++
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


P-143882
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
P-143886
darko202
» 2016-01-22 15:29:05
P-143888
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.
P-143889
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.
P-143894
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.
P-144077
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?
P-150838
« 1 » 2
  Strona 1 z 2 Następna strona