2017-01-01 4 views
-1

Что-то вроде этого:Как читать/интерпретировать сложные выражения в C++

int ctr[], i, distinct = 0; 

string s; 

distinct += ctr[s[i]]++ == 0; // <-- This line 

Я понимаю, в обозначениях массива и то, что увеличивающие и уменьшающие операторы. Я просто не понимаю, как писать так. Что еще более важно, цель такого написания.

+5

Кто-нибудь написал этот код 'distinct + = ctr [s [i]] ++ == 0'- Выходите и кричите –

+0

Похоже, что какой-то код был запутан из-за оптимизации исходного уровня. Я полагаю, хороший компилятор будет делать то же самое на уровне AST/Assembly. –

+1

http://en.cppreference.com/w/cpp/language/operator_precedence –

ответ

0

Это как следующий код:

char c = s[i]; 
distinct = distinct + ctr [x]; // "value +=" is the same as "value = value + ..." 

ctr[c]++; // char is used as number here. The c. element in ctr[] is incremented. 
//because of c++ instead of ++c the increment is done after all. 
distinct == 0 // returns a boolean value into nirvana :) 

Я надеюсь, что это поможет.

Но если вы хотите ввести код, вы не должны писать такой код. Особенно, если вы хотите прочитать свой код в будущем или хотите, чтобы другие его читали ;-)

+0

Прочтите о приоритете оператора. Сначала производится инкремент. Сравнение - последняя операция. Ваш ответ неправильный –

+0

Да, сегодня немного поздно, извините, вы правы! – Christian

+0

теперь делает другую ошибку (та же ошибка, что и другой ответ) - результат '==' - это то, что добавлено в 'distinct' –

 Смежные вопросы

  • Нет связанных вопросов^_^