文字列を受ける場合
int chg(const char* s)
{
 int ret = 0;
 char tmp[2] = { 0 };
 while (*s && !isdigit(*s)) s++; /*数字じゃないところは飛ばす */
 if (*s) {
  while (*s && isdigit(*s)) { /* 数字が連続している間だけ */
   tmp[0] = *s; ret += atoi(tmp);
   s++;
  }
 }
 return ret;
}

環境依存で
 isdigit(*s) を ('0'<=*s && *s <='9') に
 tmp[0] = *s; ret += atoi(tmp); を ret += s[0] - '0'; に
置き換えることもできるかもしれない