To jest tzw. operator wyrażenia warunkowego (po angielsku ternary operator)
int words = ( text.length() ? 1 : 0 );
Z tego omówię najpierw to:
text.length() ? 1 : 0
Ten zapis jest równoznaczny z tym (dlatego że wartości nie równe 0 oznaczają true
, 0
oznacza false
):
text.length() != 0 ? 1 : 0
Czyli jeżeli długość pobranego tekstu jest inna niż 0 (choć wiadomo że nie można mieć -1 znaków) to wartość będzie równa 1
(wartość po lewej stronie dwukropka), w przeciwnym razie będzie to 0
(wartość po prawej stronie dwukropka).
Ta wartość zostanie następnie przypisana do zmiennej words
.
Można byłoby zapisać to za pomocą if-else
:
int words;
if (text.length())
words = 1;
else
words = 0;
Na tej stronie jest to opisane bardziej ogólnie.
Ten kawałek kodu:
for( char chr : text )
to tzw. pętla for-each. Czyli zamiast używać indeksu możesz używać znaku ze zmiennej chr
.
std::isspace(chr)
Sprawdza czy znak jest spacją, tabulaturą, znakiem nowej linii i jeszcze kilka rzeczy. Więcej tutaj