Получить количество цифр в целом числе по основанию 10C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Получить количество цифр в целом числе по основанию 10

Сообщение Anonymous »

Меня беспокоило, что std::to_string не позволяет использовать собственные распределители, поэтому я пишу свою собственную реализацию. Для этого было бы полезно заранее знать, для скольких цифр мне нужно выделить строковое пространство. Я мог бы сделать это несколькими способами:
Используйте цикл for, как показано здесь:

Код: Выделить всё

int length = 1;
int x = 234567545;
while (x /= 10)
length++;
Используйте логарифм по основанию 10 + 1:

Код: Выделить всё

uint32_t x{234567};
double ds = std::log10(static_cast(x)) + 1;
int digits = static_cast(ds);
.. возможно другие решения.
Вот мой код:
Демо

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

using allocator_t = std::pmr::polymorphic_allocator;

template 
inline auto to_string(T number, allocator_t allocator = {}) -> std::pmr::string {
// const std::size_t size = ???
std::pmr::string str{ size, '\0', allocator };
if constexpr(std::same_as) {
std::snprintf(&str.front(), size, "%" PRIu32, number);
} else if constexpr (std::same_as) {
std::snprintf(&str.front(), size, "%" PRIu16, number);
} else if constexpr (std::same_as) {
std::snprintf(&str.front(), size, "%" PRIu8, number);
}
// ...
return str;
}

int main()
{
uint32_t x = 256;
printf("My number = %s\n", to_string(x).data());
}
Вопрос: какой наиболее эффективный и надежный способ получить количество цифр целого числа для этого варианта использования?

Подробнее здесь: https://stackoverflow.com/questions/755 ... 10-integer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»