what s[i]-'0' does
It seems that s is a character array or a pointer to the first
element of a character array. And element s[i] contains a character
that represents a digit as for example '5' . To convert this character
that for example in ASCII has internal code equal to 53
(while internal code of character '0' is 48) there is used expression
s[i] -'0'
that is equivalent to
53 - 48
and equal to number 5