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?: #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' ); return 0; } I proszę też o wytłumaczenie tego "typu" size_t. Z góry dzięki. |
|
xevuel |
» 2012-08-18 21:22:39 |
|
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:
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:
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ę. |
|
|
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 |
|
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. |
|
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 :) |
|
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: #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. |
|
DejaVu |
» 2012-08-19 18:10:52
Nie sądzę abyś rozumiał pisanie warunków skoro coś takiego napisałeś - polecam powtórzyć sobie rozdział o instrukcji warunkowej oraz operacjach logicznych. |
|
« 1 » 2 |