Podbijam temat - również pozytywnie przeszedłem 100.000 testów z zamieszczonych urzednio plików i nadal nie mogę dojść co jest nie tak kod - https://ideone.com/20DyK422
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]=='.'))
?
Moj fragment kodu który przekleiłeś sprawdza warunek użycia dozwolonych w adresie e-mail znaków, natomiast fragment
twojego kodu, który podałeś jako przykład występuje w moim rozwiązaniu kawałek dalej i jest to
if (s[i-1]==char(46) || s[i+1]==char(46) || s[i-1]==char(64) || s[i+1]==char(64)) b++;
Tak jak pisałem wklejony przeze mnie kod spełniał 100 tysięcy przypadków testowych więc wydaje mi się że problem nie leży w nie uwzględnieniu warunków tylko gdzieś indziej, a tak biegły nie jestem, żeby odnaleźć gdzie
Rozumiem, że masz na myśli adresy zaczynające się od kropki.
Z treści zadania: “w mailu może być wiele znaków kropki i każda musi znajdować się między dwoma znakami różnymi niż znak (.) i (@)” - nie wiem czy oznacza to, że kropka może czy nie może być pierwszym znakiem.
Sprawdziłem zaproponowany test i mój kod w odpowiedzi na zwraca “Tak”. W celu sprawdzenia czy może jednak masz rację dodałem warunek na adresy zaczynające się od kropki tak żeby wyjścei było “Nie” i zadanie dalej nie przechodzi. więc to zapewne nie tu leży problem.
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
_@_.__
Dlaczego miałby dawać Nie? Ten przykład (według mnie) spełnia warunki zadania więc prawdopodobnie nie ma takiego testu i dlatego Twoje rozwiązanie przeszło.
(Oczywiście jeżeli dobrze zrozumałem treść).
edit:
[trzeci ciąg znaków składający się z 2 lub 3 liter]
chodzi o to?
edit2:
nawet jeżeli to w moim przypadku jeszcze coś trzeba
Faktycznie trzeci ciąg składający się z 2-3 liter uwzględniłem. Ten przypadek z
_@_.__
już nie przejdzie ale nadal nie zalicza mi zadania Zmiany w kodzie : https://ideone.com/EomO4S24