Sumowanie cyfr w łańcuchu znaków

0

mam takie zadanie:
Zapisz kod, który pobierze z klawiatury zdanie zawierające kilka wyrazów. W zdaniu tym mogą znajdować się cyfry/liczby.
Oblicz sumę wszystkich cyfr jakie pojawiły się w ciągu tekstowym.
(na pewno przyda się konwersja stoi(), chyba że wolisz to zrobić ręcznie)
Przykład:
Podano:

Ala15 ma ko250taX

Wynik:

13

oto mój kod:

#include <iostream>

using namespace std;

int main()
{
    string zdanie;
    int sum = 0;
    cout << "Wpisz zdanie: ";
    getline(cin, zdanie);
    for(int i = 0; i < zdanie.length(); i++)
    {
        if(isdigit(zdanie[i]))
        {
            sum += atoi(zdanie[i]);
        }
    }
    cout << "suma cyfr: " << sum << "\n";

    return 0;
}

wyświetlany jest błąd:

main.cpp:16:24: error: invalid conversion from ‘__gnu_cxx::__alloc_traits, char>::value_type’ {aka ‘char’} to ‘const char*’ [-fpermissive]

jak to naprawić, lub czy jest inny sposób na rozwiazanie tego zadania?

2

Nie używaj stoi, tutaj to nie ma najmniejszego sensu (poza tym robisz to błędnie). Skoro masz już znak, i wiesz, że jest on cyfrą ASCII, to możesz sobie zwyczajnie dać zdanie[i] - '0' i masz wartość tej cyfry.

0

Czy wolę if(znak>=48 && znak<=58){suma+=znak-48;} ? xD może i wolę, a mam woleć? xD

0
#include <iostream>
#include <cctype>
using namespace std;

int main()
{
    unsigned sum=0;
    cout<<"Wpisz zdanie: ";
    for(int ch;(ch=cin.get())!='\n';sum+=ch-'0') if(!isdigit(ch)) ch='0';
    cout<<"suma cyfr: "<<sum<<endl;
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1