Перевод int в char и обратно
Столкнулся со сложностями перевода числа int в массив char*. Например, вход - int a = 1084882, а выход - массив из '1','0','8'... И обратно так же. Есть ли идеи, как реализовать такие функции? Я написал для string, но string использовать нельзя. Мой код:
string toStr(int v)
{
std::ostringstream oss;
os << v;
return os.str();
}
int fromStr(const string& str)
{
std::istringstream is(str);
int result;
is >> result;
return result;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Так сойдет?
char * istr(int n)
{
char s[20] = { 0 }, // С запасом :)
*c = s+19;
int sign = (n < 0) ? (n*=-1, -1) : (n==0) ? 0 : 1;
if (n == 0) *--c = '0';
else
{
for(; n; n/=10) *--c = n%10+'0';
if (sign < 0) *--c = '-';
}
char * r = new char[s+20-c];
char *q = r;
while(*q++ = *c++);
return r;
}
int sint(const char * s)
{
int n = 0, sign = 1;
if (*s == '-') { sign = -1; s++; }
while(*s) n = n*10 + *s++ - '0';
return n*sign;
}
Только надо не забывать удалять потом строку с помощью delete[]...
Update
Правка от @avp:
char * istr(int n)
{
char s[20] = { 0 }, // С запасом :)
*c = s+19;
unsigned int m = n;
int sign;
if (n < 0) {
m = -n;
sign = -1;
}
else if (n==0) sign = 0;
else sign = 1;
if (m == 0) *--c = '0';
else
{
for(; m; m/=10) *--c = m%10+'0';
if (sign < 0) *--c = '-';
}
char * r = new char[s+20-c];
char *q = r;
while(*q++ = *c++);
return r;
}