#cpp
Как в этом языке конвертировать число в строку?
label->Text = trackBar->Value;
Ответы
Ответ 1
К сожалению, в С++2003 нет нормального стандартного способа конвертации чисел в строки. Возможные варианты решения: sprintf - решение в стиле Си itoa - ещё один вариант в стиле Си. Не является стандартной функцией, но многие реализации поддерживают. stringstream: stringstream ss; int i = 777; ss << i; string str = ss.str(); boost::lexical_cast Для более сложных преобразований можно использовать boost::format В С++11 появились наконец нормальные функции конвертации, в том числе std::to_string, перегруженная для разных числовых типов. В g++-4.7 работает нормально.Ответ 2
atoi(); из stdlib.h Гугл по прежнему помогает в решении подобных вопросов.Ответ 3
@Fangog, сам с удивлением обнаружил, что кроме sprintf() ничего стандартного нет. Если нужно, вот функция для разных систем счисления. От двоичной до 16-ричной общепринятые цифры. Для остальных (до 64-ричной) набор символов из base64 (RFC1113). Вы может быть удивитесь, но printf в винде (по крайней мере 32-bit XP) неправильно работает с несколькими аргументами, если среди них есть long long (64-bit целое). Столкнувшись с этим фактом, я написал функцию преобразования (ну и немного обобщил ее). Если сочтете полезной - берите. /* llstr.c avp 2011, 2012 Convert long-long fixed integer (64-bit) to string in the specified radix (any 2..64 (bin, octal, decimal, hex ...) ) Returns string length. */ #ifdef TEST #include#include #include #endif int my_llstr (long long v, // source for 'printing' int radix, int unsign, // if 1 then unsigned source char *res) // memory for result { const char *dig = "0123456789abcdef"; static const char cb64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; int rem[65], sp = 0; // stack for reminders char *p = res; // for return length unsigned long long u = v; // use if unsign == 1 if (!res) return 0; if (radix < 2) radix = 2; if (radix > 64) radix = 64; if (radix > 16) dig = cb64; if (unsign) { while (u >= radix) { rem[sp++] = u%radix; u = u/radix; } *res++ = dig[u]; } else { if (v < 0) { *res++ = '-'; v = -v; } while (v >= radix) { rem[sp++] = v%radix; v = v/radix; } *res++ = dig[v]; } while (sp) *res++ = dig[rem[--sp]]; *res = 0; return res-p; } #ifdef TEST main (int ac, char *av[]) { long x; int n; char buf[100]; int r = av[1]? atoi(av[1]): 10; while (scanf("%ld",&x) == 1) { n = my_llstr(x, r, 0, buf); printf ("%s\n",buf); } } #endif Вот, посмотрел свежим взглядом и чуть подправил (теперь указатель на цифры устанавливается один раз в начале). Ответ 4
Начиная с С++11, в языке есть функция to_string: int n = 1; std::string str = std::to_string(n);
Комментариев нет:
Отправить комментарий