ten tekst jest całkowicie jednoznaczny - jeżeli kropka jest pierwsza to nie znajduje się pomiędzy dwoma znakami
po “nie” dodałbym słowo “tylko” 
zamiast warunku wykluczającego:
if (s[i]<char(46) || s[i]==char(47) || (s[i]>char(57) && s[i]<char(64)) || (s[i]>char(90) && s[i]<char(95)) || s[i]==char(96) || s[i]>char(122)) b++;
w przyszłości radziłbym używać negacji warunku dopuszczającego, jako dużo czytelniejszego oraz tajemnicze char(46) zastąpić przez ‘.’, inne char() też odpowiednio
na przykład:
if (!(x>='0' && x<='9' || x>=A' && x<='Z') b++;
natomiast test dla “nie tylko”
1
_@_.__