Преобразовать целое число в массив символов фиксированной длины в C ++ - PullRequest
1 голос
/ 31 января 2012

У меня есть целое число x, которое содержит 1-4-значное число. Как я могу преобразовать его в 4-значный массив цифр (дополненный нулями, если необходимо)? То есть, если x равно 4, я хочу, чтобы массив символов y содержал 0004

Ответы [ 4 ]

4 голосов
/ 31 января 2012
// Assume x is in the correct range (0 <= x <= 9999)
char target[5];
sprintf(target, "%04d", x);
2 голосов
/ 31 января 2012

Что ж, если вы гарантированно имеете только 4 элемента в векторе, я думаю, вы сможете сделать следующее:

  char result[4];
  for(int i=0;i<4;++i)
  {
    result[3-i] = (value % 10);
    value /= 10; 
  }
0 голосов
/ 31 января 2012

Какова логическая роль числа? Обычно вы определяете манипулятор, имя которого основано на логической роли, и использовать его Может быть что-то вроде:

class serialno
{
    int myWidth;
public:
    serialno( int width ) : myWidth( width ) {}
    friend std::ostream& operator<<(
        std::ostream& stream, serialno const& manip )
    {
        stream.fill( '0' );
        stream.width( myWidth );
        return stream;
    }
};

Вы можете написать:

std::cout << serialno( 4 ) << myNumber;

(Лучшая реализация сохранит состояние форматирования потока, и восстановить его в деструкторе, вызванном в конце полного выражение.)

Чтобы поместить это в массив символов, вы, конечно, используете std::ostringstream, а не std::cout.

0 голосов
/ 31 января 2012

Попробуйте

char y[5];
sprintf(y, "%4d", x);
...