Pytanie o Find klasy String

0

Witam!

Piszę program w którym potrzebowałem znaleźć pojedynczą spację w danym stringu. Nic wielkiego więc wklepałem coś takiego:

if(unsigned pos = name.find(" ") != string::npos)
    //...
    cout << "pozycja spacji: " << pos << endl;

Okazało się, że znajduje spacje prawidłowo, ale zmienna pos jest zawsze równa 1 :|

Kod, który w końcu działa prawidłowo to:

if(name.find(" ") != string::npos)
{
    unsigned pos = name.find(" ");
    //...
    cout << "pozycja spacji: " << pos << endl;
}

Nie rozumiem dlaczego ta pierwsza wersja nie działa.. Może mnie ktoś uświadomić ? :)

1
Mc_Hammer napisał(a):

[code] if(unsigned pos = name.find(" ") != string::npos)
//...
cout << "pozycja spacji: " << pos << endl;
[/code]

Okazało się, że znajduje spacje prawidłowo, ale zmienna pos jest zawsze równa 1 :|

W takim zapisie do zmiennej pos przypisujesz wynik porównania (!=) name.pos(" ") z string::npos. Czyli przypisujesz wynik operacji logicznej.

Lepiej zapisać całość w np. takiej formie:

std::string foo = "Ala ma kota";
unsigned pos = foo.find(" ");
if(pos != std::string::npos)
    std::cout << "pozycja spacji: " << pos << std::endl; 
0

Dzięki :) trochę podejrzewałem, że o to chodzi i próbowałem kombinować z nawiasami przy ifie, ale kompilator nie przyjmował takiego rozwiązania :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1