Как преобразовать целое число в символ без библиотеки C? - PullRequest
0 голосов
/ 27 февраля 2010

В упражнении по программированию на c меня просят преобразовать int в char без использования библиотеки C.

Есть идеи, как это сделать?

edit: под int я подразумеваю встроенный тип C / C ++

Спасибо.

Ответы [ 3 ]

5 голосов
/ 27 февраля 2010

В ролях?

char c = (char)i;

А может, ты это имел ввиду?

char c = (char)('0' + i);

Я уверен, что это не то, что вы имеете в виду ... Я предполагаю, что вы хотите создать строку (массив символов)? Если это так, то вам нужно конвертировать по одной цифре за раз, начиная с самой младшей цифры. Вы можете сделать это рекурсивно, в псевдокоде:

function convertToString(i)
   if i < 10
       return convertDigitToChar(i)
   else
       return convertDigitToString(i / 10) concat convertDigitToChar(i % 10)

Здесь / - целочисленное деление, а % - целочисленное по модулю. Вам также нужно обрабатывать отрицательные числа. Это можно сделать, проверив сначала, есть ли у вас отрицательное число, вызвав функцию со значением aboslute и добавив знак минус при необходимости.

В C для производительности вы, вероятно, реализовали бы это с помощью цикла вместо использования рекурсии и путем непосредственного изменения содержимого массива символов вместо объединения строк.

3 голосов
/ 27 февраля 2010

Если вы действительно хотите строку:

#include <stdio.h>

char *tochar(int i, char *p)
{
    if (i / 10 == 0) {
        // No more digits.
        *p++ = i + '0';
        *p = '\0';
        return p;
    }

    p = tochar(i / 10, p);
    *p++ = i % 10 + '0';
    *p = '\0';
    return p;
}

int main()
{
    int i = 123456;
    char buffer[100];
    tochar(i, buffer);
    printf("i = %s\n", buffer);
}
1 голос
/ 27 февраля 2010

Для полноты, если задача состоит в том, чтобы преобразовать int в строку, как подозревает anthares, вы можете использовать второй ответ Марка для преобразования каждой цифры целого числа. Чтобы получить каждую цифру, вам нужно взглянуть на операторы деления и по модулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...