Перевод целых и вещественный чисел в массив символов(char) без использования стандартных функций

124
26 мая 2019, 18:40

Необходимо написать функции перевода вещественных и целых чисел в строку без функций. Первую функцию написал.

    int numberofdigits(int n) 
    {
    int counter = n == 0 ? 1 : 0;
    while (n != 0) 
        {
        counter++;
        n /= 10;
        }
    return counter;
    }

char * IntToChar(int * n)
{
char *s = new char[numberofdigits(*n) +1];
s[numberofdigits(*n)] = '\0';
int digit, i = numberofdigits(*n) - 1;
while(*n != 0) 
    {
    digit = *n % 10;
    *n /= 10;
    s[i] = (char)('0' + digit);
    i--;
    }
return s;
}
сhar * FloatToChar(float * f) 
{
    char * s = new char[10];

    return s;
}
Answer 1

Первая версия:

char *FloatToChar(float * f) {
    bool neg = false;
    if (*f < 0) {
        neg = true;
        *f = -(*f);
    }
    int precision = 3; // количество знаков после запятой
    int whole = (int)*f;
    int fractional = (int)((*f - floor(*f)) * pow(10, precision));
    //std::cout << whole << " " << fractional << std::endl;
    int sizeWh = numberofdigits(whole), sizeFr = numberofdigits(fractional);
    char * s = new char[sizeWh + sizeFr + neg ? 3 : 2];
    if (neg) s[sizeWh + sizeFr + 2] = '\0';
    else s[sizeWh + sizeFr + 1] = '\0';
    int i, j;
    if (neg) i = sizeWh;
    else i = sizeWh - 1;
    while (whole != 0) {
        int digit = whole % 10;
        s[i] = (char)(digit + '0');
        whole /= 10;
        i--;
    }
    if (neg) s[sizeWh + 1] = '.';
    else s[sizeWh] = '.';
    if (neg) j = sizeWh + sizeFr + 1;
    else j = sizeWh + sizeFr;
    while (fractional != 0) {
        int digit = fractional % 10;
        s[j] = (char)(digit + '0');
        fractional /= 10;
        j--;
    }
    //float intpart, fractpart;
    //fractpart = modf(*f, &intpart);
    //while (fractpart < 0) fractpart *= 10;
    if (neg) s[0] = '-';
    return s;
}
READ ALSO
boost::asio::socket_base::reuse_address

boost::asio::socket_base::reuse_address

Доброго времени суток!

118
Адрес элемента из указателя на вектор

Адрес элемента из указателя на вектор

У меня есть указатель на вектор std::vector*Как получить адрес элемента i этого вектора?

111
Переполнение Metaspace

Переполнение Metaspace

В Java, начиная с 8 версии, появилась новая вариация OutOfMemory error : Metaspace

101
Плавный переход заднего фона во ViewPager

Плавный переход заднего фона во ViewPager

Всем привет! Подскажите по такому вопросуРазрабатываю под android на Kotlin

143