Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > перевод int в *char


Автор: powerfox 6.1.2006, 22:28
Как получить из числа строку, содержащую это число?
Где-то у Страуструпа было такое упражнение(если не путаю с atoi, где задание стоит обратное), вроде делал, а сейчас не знаю как.

Автор: Void 6.1.2006, 22:33
Вариант 1 (C style):
Код
int i = 123;
const size_t buf_size = 32;
char buf[buf_size];
snprintf(buf, buf_size, "%d", i);


Вариант 2 (C++ style):
Код
int i = 123;
std::ostringstream os;
os << i;
const char *s = os.str().c_str();


Вариант 3 (Microsoft specific):
Код
int i =123;
char buf[32];
_itoa(i, buf, 10);

Автор: DeadSoul 6.1.2006, 22:36
Void, забыл про MFC
Код

CString temp;
int q=23;
temp.Format("%d", q):


Сорри, не заметил, что у него нужно char* на выходе. А удалить сообщение не могу

Автор: Void 6.1.2006, 22:43
DeadSoul
Ну, от CString до char* всего полшага, но, по-моему, товарищ powerfox MSVC не пользуется smile

Автор: powerfox 6.1.2006, 22:47
Код
error: aggregate `std::ostringstream os' has incomplete type and cannot be defined

Автор: Void 6.1.2006, 22:49
#include <sstream>

Автор: powerfox 6.1.2006, 22:50
Спасибо Void, в стиле Си, кажется запахало. А что за функция snprintf?

Автор: Void 6.1.2006, 22:53
Цитата(powerfox @ 7.1.2006, 00:50 Найти цитируемый пост)

А что за функция snprintf?

То же самое, что и printf, только печатает в буфер, и проверят на выход результирующей строки за его пределы.

Автор: powerfox 6.1.2006, 22:55
Спасибо, понял. А что лучше использовать: Си стиль или Си++?

Автор: DeadSoul 6.1.2006, 23:04
powerfox, C++ однозначно.

Автор: blackofe 6.1.2006, 23:27
благодаря void'у узнал, что itoa (равно как ltoa) не входит в ANSI-C. правда, написано, что эти функции поддерживаются большинством компиляторов.

Автор: Mephistopheles 7.1.2006, 07:05
А это от велосипедиста:
Код

...
char tmpchr[2] = {'0', '\0'};
    for (unsigned int j = 0; j < length; j++)//length - длинна числа. num - число
    {
        for (unsigned int i = 1; i < (length - j); i++)
            step *= 10;//step - int
        tmpchr[0] = (char)(48 + (num/step)%10);//Выделение цифры и её перевод в char.
        applyString(tmpchr);//Добавить к нашей строке строку tmpchr
        step = 1;
    }
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)