#include <iostream>
#include <cctype>
enum state {
s_zero, s_number, s_end
};
state m_next(const char*& s, size_t& n){
state st;
if(! *s)
st = s_end;
else {
while(*s && ! std::isdigit(*s))
++s;
if(*s == '0'){
++s;
st = s_zero;
} else {
for(n = 0; std::isdigit(*s); ++s)
n = n*10 + (size_t)(*s - '0');
st = s_number;
}
}
return st;
}
int main(void){
char s[] = "1 2 4 0 4 4 5 0 32 21 35 0 3 0";
state st;
size_t n;
size_t sum = 0;
const char* ptr = &s[0];
do {
switch((st = m_next(ptr, n))){
case s_number:
sum += n;
break;
case s_zero:
std::cout << "sum: " << sum << std::endl;
sum = 0;
break;
}
} while(st != s_end);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2N0eXBlPgoKZW51bSBzdGF0ZSB7CglzX3plcm8sIHNfbnVtYmVyLCBzX2VuZAp9OwoKc3RhdGUgbV9uZXh0KGNvbnN0IGNoYXIqJiBzLCBzaXplX3QmIG4pewoJc3RhdGUgc3Q7CgoJaWYoISAqcykKCQlzdCA9IHNfZW5kOwoJZWxzZSB7CgkJd2hpbGUoKnMgJiYgISBzdGQ6OmlzZGlnaXQoKnMpKQoJCQkrK3M7CgoJCWlmKCpzID09ICcwJyl7CgkJCSsrczsKCQkJc3QgPSBzX3plcm87CgkJfSBlbHNlIHsKCQkJZm9yKG4gPSAwOyBzdGQ6OmlzZGlnaXQoKnMpOyArK3MpCgkJCQluID0gbioxMCArIChzaXplX3QpKCpzIC0gJzAnKTsKCQkJc3QgPSBzX251bWJlcjsKCQl9Cgl9CglyZXR1cm4gc3Q7Cn0KCgppbnQgbWFpbih2b2lkKXsKCWNoYXIgIHNbXSA9ICIxIDIgNCAwIDQgNCA1IDAgMzIgMjEgMzUgMCAzIDAiOwoKCXN0YXRlICBzdDsKCXNpemVfdCBuOwoKCXNpemVfdCBzdW0gPSAwOwoJY29uc3QgY2hhciogcHRyID0gJnNbMF07CglkbyB7CgoJCXN3aXRjaCgoc3QgPSBtX25leHQocHRyLCBuKSkpewoJCWNhc2Ugc19udW1iZXI6CgkJCXN1bSArPSBuOwoJCQlicmVhazsKCQljYXNlIHNfemVybzoKCQkJc3RkOjpjb3V0IDw8ICJzdW06ICIgPDwgc3VtIDw8IHN0ZDo6ZW5kbDsKCQkJc3VtID0gMDsKCQkJYnJlYWs7CgkJfQoKCX0gd2hpbGUoc3QgIT0gc19lbmQpOwoJcmV0dXJuIDA7Cn0=