Возможное решение с использованием sscanf()
и наборов сканирования:
const char* s = "ab234cid*(s349*(20kd";
int i1, i2, i3;
if (3 == sscanf(s,
"%*[^0123456789]%d%*[^0123456789]%d%*[^0123456789]%d",
&i1,
&i2,
&i3))
{
printf("%d %d %d\n", i1, i2, i3);
}
, где %*[^0123456789]
означает игнорировать ввод до тех пор, пока не будет найдена цифра. См. Демонстрацию в http://ideone.com/2hB4UW .
Или, если число номеров неизвестно, вы можете использовать спецификатор %n
для записи последней позиции, прочитанной в буфер:
const char* s = "ab234cid*(s349*(20kd";
int total_n = 0;
int n;
int i;
while (1 == sscanf(s + total_n, "%*[^0123456789]%d%n", &i, &n))
{
total_n += n;
printf("%d\n", i);
}