Essendo i un intero, str[] un array di char...

i= i * 10 + (str[a]-'0');

Converte la stringa str in numero (i)

Non ho capito però il senso di str[a]-'0'

Il decremento di '0' vuol dire forse convertire il carattere nel rispettivo numerico (in base alla differenza nel sistema ascii) ???