C/C++

Подскажите, пожалуйста, что значит эта строка n+=l?a[--l]-'0':0 c++?

String a; int n;
int l=a.length();
Это короткая запись

if (l) {
n = n + a[--l]-'0';
} else {
n = n + 0;
}
Канат Каримов
Канат Каримов
22 292
Лучший ответ
Ренат Фаррахов Спасибо, пожалуйста, подскажите l кол-во символов числа а, тогда что под a[l] подразумевается ?
Это говнокод.
В те времена, когда создавался С, не было оптимизирующих компиляторов и поэтому в язык вставили возможность самому програмисту что то пооптимизировать. Сейчас это реликт и так писать лучше не надо - это путь выстрелить себе в ногу.
Это означает, что тебе нечем заняться))
n+=l?a[--l]-'0':0
Для того что бы понимать данную запись нужно неплохо разбираться в с++.
Первое вам объяснили что это короткая запись. Тут используются тернарный оператор и операторы типа +=.
Если посмотреть на уже разобраную запись то:
if (l) { //проверяет пустая ли строка или нет
//нужно знать что в си++ все что не ноль считается true то есть если строка не пустая, не ноль то попадет в эту ветку
n = n + a[--l]-'0'; //a[I] - это последний символ когда от него отнимают символ '0' то получают число равное символу числа. То есть например из символа '9' получаем число 9. Получается к n прибавляют последнее число строки а потом I уменьшается на один, видимо что бы на следующей итерации цикла уже прибавлять предпоследнее число
} else {
n = n + 0; // Если же строка пустая то к n прибавляем 0
}

короче такая строка считает сумму цифр строки если ее разместить в цикле
Только нужно убедится что перед циклом n равна нулю иначе вы получите не результат сложения, а "мусор". int n; - не гарантирует что в n будет ноль. Там может быть все что угодно.

Похожие вопросы