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
» 2012-08-19 19:12:32
Ok. Na podstawie tego:
wiek > 100 || wiek < 2;
 napisałem coś takiego:
if( a > - 1 && b > - 1 )
, tylko że teraz cały czas wypisuje "nie znaleziono" - domyślam się, że to nie o ten warunek chodziło. Mam małą prośbę. Nie mogę się domyśleć o jaki warunek chodzi, więc czy mógłby mi ktoś napisać gotowca? A ja na jego podstawie znajdę swój błąd oraz przeanalizuję go sobie, , tak abym go więcej nie powtórzył. Wiem, że nie jesteście skłonni do dawania gotowców, więc proszę Was abyście zrobili wyjątek - będę Wam bardzo, bardzo wdzięczny.

/edit:

A tak w ogóle to napisałem sobie taki kod, aby sprawdzić pozycję wyrazu 1 i wyskakuje mi jakaś kosmiczna liczba.

cout << a;
P-62988
DejaVu
» 2012-08-19 21:20:49
Dopisz sobie std::cout przed tym warunkiem i wypisz jakie wartości mają a i b.
P-63007
Berux
Temat założony przez niniejszego użytkownika
» 2012-08-19 21:59:32
Właśnie to zrobiłem i  wypisuje mi takie coś: 1, 17Nie znaleziono  1, 4294967295Nie znaleziono  23, 35Nie znaleziono   4294967295, 35Nie znaleziono

Dlaczego tak jest?
P-63012
DejaVu
» 2012-08-19 22:04:17
W którym miejscu w kursie jest napisane, że -1 oznacza fakt nieznalezienia frazy? :) Druga sprawa: wklej obecny wygląd tej problematycznej funkcji - obecnie nikt nie jest w stanie Ci nic więcej powiedzieć.
P-63013
Berux
Temat założony przez niniejszego użytkownika
» 2012-08-19 22:08:13
Wiem,że w kursie tak nie jest napisane, ale dałem tak, bo było w kursie napisane, że numerowanie pozycji znaków zaczynane jest od zera. 

/edit:

C/C++
bool szukaj( string & tekst, string wyraz1, string wyraz2 )
{
   
    size_t a = - 1;
    size_t b = - 1;
   
   
    a = tekst.find( wyraz1 );
   
    b = tekst.find( wyraz2 );
   
    cout << a << ", " << b;
   
    if( a > - 1 && b > - 1 )
    {
        return true;
    }
   
    return false;
}

/edit2:

Domyślam się, że te kosmiczne liczby są dlatego, że nadałem wartość zmiennym a i b, ale nie umiałem inaczej(to znaczy umiałem, ale coś mi to nie wychodziło).

/edit3:

Udało się. Napisałem to z użyciem string::npos. Oto kod:

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

using namespace std;

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

void wypiszWynik( bool czyZnaleziono )
{
    if( czyZnaleziono == true )
   
         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;
}

Dzięki wszystkim za pomoc.
P-63015
DejaVu
» 2012-08-19 23:13:24
Pozwoliłem sobie otworzyć - super, że Ci się udało :) a na koniec jeszcze dam Ci lepsze rozwiązanie:
C/C++
if( a != std::string::npos && b != std::string::npos )
P-63024
1 « 2 »
Poprzednia strona Strona 2 z 2