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

Lekcja 27 - nie rozumiem deklaracji metody find

Ostatnio zmodyfikowano 2012-08-19 23:13
Autor Wiadomość
Berux
Temat założony przez niniejszego użytkownika
Lekcja 27 - nie rozumiem deklaracji metody find
» 2012-08-18 21:18:54
A więc zacząłem czytać lekcję 27. Doszedłem do deklaracji metody find i nic z niej nie rozumiem. Proszę o wytłumaczenie:

Gdzie w poniższym kodzie znajduje się deklaracja metody find?:

C/C++
#include <string>
#include <iostream>

void szukajZnaku( std::string & tekst, char szukanyZnak )
{
    size_t znalezionaPozycja = tekst.find( szukanyZnak );
    if( znalezionaPozycja == std::string::npos )
         std::cout << "Nie znaleziono znaku w tekscie" << std::endl;
    else
         std::cout << "Znak zostal odnaleziony na pozycji " << znalezionaPozycja << std::endl;
   
}

int main()
{
    std::string naszTekst = "Przyklad z kursu C++ (http://cpp0x.pl)";
    szukajZnaku( naszTekst, 'k' ); //szuka litery 'k' w tekście
    return 0;
}

I proszę też o wytłumaczenie tego "typu" size_t. Z góry dzięki.
P-62907
xevuel
» 2012-08-18 21:22:39
O size_t masz tutaj:
http://www.cplusplus.com/reference/clibrary/cstring/size_t/

Gdzie w poniższym kodzie znajduje się deklaracja metody find?:
Gdzie w kursie masz stwierdzenie, że się tam znajduje?
P-62908
Berux
Temat założony przez niniejszego użytkownika
» 2012-08-18 21:24:57
Pytam się, bo jest w kursie napisane o deklaracji i zastanawiam się czy jakoś się jej używa.

//edit:

I jeszcze jedno. Bo w kursie jest napisane:

Do wyszukiwania frazy występującej w tekście służy metoda find, która należy do klasy std::string. Metoda find posiada kilka deklaracji, które różnią się przyjmowanymi argumentami - wybiera się zazwyczaj tą, która na daną chwilę jest dla nas najbardziej odpowiednia :) Deklaracje tej metody są następujące:
C/C++
size_type find( value_type ch, size_type off = 0 ) const;
size_type find( const value_type * ptr, size_type off = 0 ) const;
size_type find( const value_type * ptr, size_type off, size_type count ) const;
size_type find( const basic_string & str, size_type off = 0 ) const;
Powy ż sze zapisy w maksymalnym uproszczeniu mo ż esz spokojnie interpretowa ć tak:
C/C++
unsigned int find( char znak, unsigned int offset = 0 );
unsigned int find( const char * sNapis, unsigned int offset = 0 );
unsigned int find( const char * sNapis, unsigned int offset, unsigned int liczbaZnakow );
unsigned int find( const std::string & napis, unsigned int offset = 0 );

Wszystkie wymienione wyżej metody zwracają to samo - uściślając jest to pozycja na której znaleziono poszukiwany znak bądź poszukiwaną frazę.
P-62909
DejaVu
» 2012-08-18 21:25:11
Ciekawa uwaga - będę musiał sobie jutro przejrzeć czy faktycznie jest ona słuszna...

/edit:
Dobra już wiem o co chodzi. Deklaracje oraz implementacje są w plikach nagłówkowych, które dołączasz do kodu (np. #include <string>). Widzieć ich nie widzisz (bo nie musisz) ale wiesz, że one istnieją. Można o tym poczytać w dokumentacji. Czytając dane hasło w dokumentacji dowiadujesz się jakie dana funkcja (czy też metoda) posiada argumenty i jak należy ją wywoływać. Twoim zadaniem nauczyć się wywoływać funkcje/metody (czyli korzystać z gotowych rozwiązań), a nie dociekać jak to jest tak naprawdę zaimplementowane oraz gdzie dokładnie te deklaracje się znajdują.

/edit2:
@up: być może zwracają to samo ale zauważ, że przyjmują inne argumenty.

/edit3:
W dalszej części cytowanego rozdziału jest przykład jak wywołać wspomnianą metodę.

http://cpp0x.pl/kursy/Kurs-C++/Poziom-3 /Wyszukiwanie-frazy-w-tekscie/352
P-62910
Berux
Temat założony przez niniejszego użytkownika
» 2012-08-18 21:33:30
Poprostu nie zdążyłem edytować wiadomości - miałem to usunąć. Dzięki już rozumiem.
P-62911
DejaVu
» 2012-08-18 21:34:32
Nie ma potrzeby usuwania :) ktoś inny może mieć w przyszłości podobny problem więc warto zostawiać pytania. Udzielone odpowiedzi w ramach tego wątku mogą pomóc kiedyś innym ;) skoro już rozumiesz to temat zamykam :)
P-62912
Berux
Temat założony przez niniejszego użytkownika
» 2012-08-19 14:28:06
Sorry, że otwieram, ale pojawił się problem przy zadaniu domowym. Myślę jak mogę, ale nic nie mogę wymyśleć. Problem jest taki, że cały czas wypisuje "znaleziono".


Kod:
C/C++
#include <iostream>
#include <string>

using namespace std;

bool szukaj( string & tekst, string wyraz1, string wyraz2 )
{
   
    int a = - 1;
    int b = - 1;
    a = tekst.find( wyraz1 );
   
    b = tekst.find( wyraz2 );
   
    if(( a && b ) > - 1 )
    {
        return true;
    }
   
    return false;
}

void wypiszWynik( bool czyZnaleziono )
{
    if( czyZnaleziono )
   
         cout << "Znaleziono" << endl;
    else
         cout << "Nie znaleziono" << endl;
   
}

int main()
{
   
    string napis = "Zadanie domowe z kursu C++ (http://cpp0x.pl) - najlepszy kurs C++ w Internecie!";
    wypiszWynik( szukaj( napis, "ada", "kurs" ) );
    wypiszWynik( szukaj( napis, "ada", "taki" ) );
    wypiszWynik( szukaj( napis, "C++", "cpp0x" ) );
    wypiszWynik( szukaj( napis, "C#", "cpp0x" ) );
    return 0;
}

Z góry dziękuję za pomoc.
P-62954
DejaVu
» 2012-08-19 18:10:52
C/C++
if(( a && b ) > - 1 )
Nie sądzę abyś rozumiał pisanie warunków skoro coś takiego napisałeś - polecam powtórzyć sobie rozdział o instrukcji warunkowej oraz operacjach logicznych.
P-62985
« 1 » 2
  Strona 1 z 2 Następna strona