01. TryParse [check if string is integer]
Здравейте, колеги!
Първа задача, първи въпрос - така започва курсът за мен
Въпросът ми е защо първоначалното ми решение ми даде 20/100 и каква е разликата с второто решение, което сработи.
Първоначално създадох функцията TryParse.h, където приемам стринг-а от входа и integer (естествено по референция, за да мога да променя стойността му) . До тук добре, но исках да намеря най-добрия начин за проверка - дали стрингът съдържа само и единствено int.
Първоначално създадох (намерих в интернет) следната функция за проверката:
bool isNumber(const string& s)
{
return !s.empty() && all_of(s.begin(), s.end(),::isdigit);
}
За жалост, въпреки че на моя компютър програмата работеше, Judge ми даде само 20/100 (само 2-та Zero Tests и Test #1 ми бяха correct).
След известно лутане, реших, че проблемът в решението ми е именно в тази функция и намерих друга функция, която използвах и решнието ми сработи:
inline bool isInteger(const std::string & s)
{
if(s.empty() || ((!isdigit(s[0])) && (s[0] != '-') && (s[0] != '+'))) return false;
char * p;
strtol(s.c_str(), &p, 10);
return (*p == 0);
}
За пръв път използвам strtol, много ми хареса като функция и все още я разучвам, но не мога да разбера какъв е проблемът с първият вариант на функцията ми - какво изпускам там за разлика от втората?
Благодаря предварително на всеки, който отдели от времето си, за да ми разясни казуса!