Как я могу суммировать все цифры в строке num
в целое число sum
, используя лямбду?
std::string num = "1234567891011";
int sum = accumulate(num.begin(), num.end(), 0, [](auto & a, auto & b)
{
// ???
// return int(a - '0') + int(b - '0') causes an error
});
При этом num
, sum
должны быть равны 48
.
Re: «вызывает ошибку» — что говорится в сообщении об ошибке?
Не адресуйте это мне. Добавьте это в свой вопрос.
Аааа, auto
. Такое благословение. Кроме случаев, когда это проклятие.
Примечание: даже если a
— это char
, тип a - '0'
— это int
. Компилятор продвигает меньшие типы для int
или unsigned int
для выполнения арифметических действий. Нет необходимости в этих гипсах.
Предполагая, что между num
и 0
всегда будут символы 9
, вы можете накапливать их следующим образом:
int sum = std::accumulate(num.begin(), num.end(), 0, [](int a, char b) {
return a + (b - '0');
});
Лично я бы использовал
int sum = 0; for (auto ch : num) sum += ch - '0';