Nie jestem w stanie za bardzo sprawdzić czy uwzględniasz wszystkie warunki zadania, jeżeli stosujesz zapis typu:
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++; //zmienia wartosc b w przypadku bledu
Dlaczego nie robisz czegoś typu (fragment mojego kodu):
else if((adres[i-1]=='.')||(adres[i-1]=='@')||(adres[i+1]=='@')||(adres[i+1]=='.'))
?