Рубрики

Реализуйте свой собственный itoa ()

Функция itoa преобразует целое число в строку с нулевым символом в конце. Он также может конвертировать отрицательные числа. Стандартное определение функции itoa приведено ниже:

char* itoa(int num, char* buffer, int base) 

Третий параметр базы указывает базу преобразования. Например: — если base равен 2, то он преобразует целое число в свою двоично-совместимую строку или если base равен 16, то он создает шестнадцатеричную преобразованную строку в виде целого числа.

Если base равно 10, а значение отрицательное, результирующей строке предшествует знак минус (-). Для любой другой базы значение всегда считается без знака.

Ссылка: http://www.cplusplus.com/reference/cstdlib/itoa/?kw=itoa

Примеры:

  itoa(1567, str, 10) should return string "1567"
  itoa(-1567, str, 10) should return string "-1567"
  itoa(1567, str, 2) should return string "11000011111"
  itoa(1567, str, 16) should return string "61f"

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

/ * Программа на C ++ для реализации itoa () * /
#include <iostream>

using namespace std;

  
/ * Вспомогательная функция для обращения строки * /

void reverse(char str[], int length)

{

    int start = 0;

    int end = length -1;

    while (start < end)

    {

        swap(*(str+start), *(str+end));

        start++;

        end--;

    }

}

  
// Реализация itoa ()

char* itoa(int num, char* str, int base)

{

    int i = 0;

    bool isNegative = false;

  

    / * Явно обрабатывать 0, иначе для 0 выводится пустая строка

    if (num == 0)

    {

        str[i++] = '0';

        str[i] = '\0';

        return str;

    }

  

    // В стандартном itoa () отрицательные числа обрабатываются только с

    // основание 10. В противном случае числа считаются без знака.

    if (num < 0 && base == 10)

    {

        isNegative = true;

        num = -num;

    }

  

    // Обработка отдельных цифр

    while (num != 0)

    {

        int rem = num % base;

        str[i++] = (rem > 9)? (rem-10) + 'a' : rem + '0';

        num = num/base;

    }

  

    // Если число отрицательное, добавляем '-'

    if (isNegative)

        str[i++] = '-';

  

    str[i] = '\0'; // Добавляем терминатор строки

  

    // Перевернуть строку

    reverse(str, i);

  

    return str;

}

  
// Драйвер программы для проверки реализации itoa ()

int main()

{

    char str[100];

    cout << "Base:10 " << itoa(1567, str, 10) << endl;

    cout << "Base:10 " << itoa(-1567, str, 10) << endl;

    cout << "Base:2 " << itoa(1567, str, 2) << endl;

    cout << "Base:8 " << itoa(1567, str, 8) << endl;

    cout << "Base:16 " << itoa(1567, str, 16) << endl;

    return 0;

}

Выход:

Base:10 1567
Base:10 -1567
Base:2 11000011111
Base:8 3037
Base:16 61f

Эта статья предоставлена Неха Махаджаном . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Реализуйте свой собственный itoa ()

0.00 (0%) 0 votes