Search code examples
c++algorithmc++11lambdaaccumulate

How to std::accumulate chars in a string as digits using lambda?


How can I sum all digits in a string num into an integer sum using a lambda?

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
});

With this num, sum must be equal 48.


Solution

  • Assuming that the num will always have chars between 0 and 9, you can accumulate as follows:

    int sum = std::accumulate(num.begin(), num.end(), 0, [](int a, char b) {
            return a + (b - '0');
    });