Najłatwiej jest to rozwiązać, sprawdzając po kolei, który znak jest cyfrą. Wystarczy, że gdy dla "i" równego np: 0 sprawdzamy czy jest cyfrą, jeśli tak wpisujemy tą cyfrę jeśli nie to pomijamy dany element string'a.
for (int i = 0; i < dlugosc; ++i)
{
if (isdigit(wyraz[i]))
std::cout << wyraz[i];
}
Zaś tamta funkcja, którą użyłeś ona jak odnalazła znak, który jest cyfrą to sprawdzała czy następny jest też jest cyfrą, i z tego wszystkiego wychodziło, że zwracała cyfry występujące obok siebie. Jeszcze w dodatku po wyświetleniu dałeś std::endl , który powodował przeskok do następnej linii.
PS. Miejmy nadzieje, że coś zrozumiałeś z tego mojego łopatologicznego tłumaczenia xd