#include <cctype> // for isdigit()
#include <cmath> // for pow()
#include <iostream>
#include <stack>
#include <string>

using namespace std;

int convert(const string &s) {
    string split_string = s;
    stack<int> digits;
    int conversion = 0;
    auto it_s = s.begin();
    
    for (;(*it_s == ' ') && (it_s != s.end()); it_s++); // skip all spaces
    for (;(isdigit(*it_s)) && (it_s != s.end()); it_s++) {
        digits.push((int) *it_s - (int) '0'); // put all decimal digits onto the stack
    };
    if(it_s == s.end() || *it_s == ' ') {
        for (int i = 0; !(digits.empty()); i++) {
            conversion += digits.top() * pow(10, i);
            digits.pop();
        }
    } else {
        // throw std::invalid_argument(s + " is not a correct int representation."); 
        // is what I'd like to do, but I guess I couldn't return -1 then, right?
        cout << s + " is not a correct non-negative int representation." << endl;
        return -1;
    }
    return conversion;
}

void use_convert_function(const string &s) {
    cout << s << " : " << convert(s) << endl << endl;
}

void test_convert_function() {
    use_convert_function("0");
    use_convert_function("128");
    use_convert_function("+128");
    use_convert_function("12x128");
    use_convert_function("128 + x");
    use_convert_function("128 Punkte");
}

int main() {
    string s = "";
    cout << "Please input a number: " << endl;
    getline(cin, s);
    use_convert_function(s);
    return 0;
}
