Giriş
atoi - int'e çevirir. İmzası şöyle
Örnek
atoi benzer ancak bu sefer int128_t ile çalışan kod şöyle
atoi - int'e çevirir. İmzası şöyle
int atoi(const char* c);
atoi artık kullanılmıyor. atoi altta kendisi de strtol()'u kullanır. Yani atoi altta şöyledir.
(int)strtol(token_start, (char **)NULL, 10);
atoi'nin sıkıntısı hatalı durumu bildirememesi. Exception atmadığı için hata kodu olarak 0 döndürüyorlar ki bu da aslında geçerli bir sayı da olabilir. Bu yüzden mümkünse bu metoddan uzak durmak lazım.Örnek
Eğer kendi atoi metodumuzu yazsaydık şöyle olurdu.
int atoi(const char *c)
{
int value = 0;
int sign = 1;
if (*c == '+' || *c == '-')
{
if (*c == '-') sign = -1;
c++;
}
while (isdigit(*c))
{
value *= 10;
value += (int)(*c - '0');
c++;
}
return value * sign;
}
Örnekatoi benzer ancak bu sefer int128_t ile çalışan kod şöyle
__int128 atoint128_t(std::string const & in)
{
__int128 res = 0;
size_t i = 0;
bool sign = false;
if (in[i] == '-')
{
++i;
sign = true;
}
for (; i < in.size(); ++i)
{
const char c = in[i];
if (not std::isdigit(c))
throw std::runtime_error(std::string("Non-numeric character: ") + c)
res *= 10;
res += c - '0';
}
if (sign)
{
res *= -1;
}
return res;
}
int main()
{
__int128 a = atoint128_t("170141183460469231731687303715884105727");
}
Hiç yorum yok:
Yorum Gönder