I've been trying to find how to do it online. I'm restricted from not using ready-made functions, like to_string
or boost::lexical_cast
, not even the <sstream>
library. How can I do it with these limitations?
Asked
Active
Viewed 98 times
0

Remy Lebeau
- 555,201
- 31
- 458
- 770

I_Burn
- 31
- 5
-
Does this answer your question? [Easiest way to convert int to string in C++](https://stackoverflow.com/questions/5590381/easiest-way-to-convert-int-to-string-in-c) – JHBonarius Sep 10 '20 at 19:42
-
2please learn to use the search function of this site or Google. – JHBonarius Sep 10 '20 at 19:43
-
Maybe check this post: [https://stackoverflow.com/questions/5590381/easiest-way-to-convert-int-to-string-in-c](https://stackoverflow.com/questions/5590381/easiest-way-to-convert-int-to-string-in-c). – Clémence CHOMEL Sep 10 '20 at 19:43
-
1One digit at a time? I would guess whoever gave you the assignment with the restrictions also gave some guidance on how to start. – Retired Ninja Sep 10 '20 at 19:43
-
@JHBonarius Nope apparently, because I was told that the sstream isn't allowed, neither is to_string or anything else like that. I tried arguing that sstream is a needed input output library but NoOoOoO, you can't do that. It's really pissing me off tbh. – I_Burn Sep 10 '20 at 19:48
-
@RetiredNinja No, I wasn't given any guidance about it. As for the solution, do you mean casting it to a char and then string? – I_Burn Sep 10 '20 at 19:51
-
3you have a stupid teacher ( I hate teachers that act they are teaching you C++, but don't allow you to actual use C++.). you can try `char` and doing `'0'+i` per digit... i.e. using the char for 0 and adding an offset. – JHBonarius Sep 10 '20 at 19:53
-
@JHBonarius Oh man tell me about it, he's a real pain sometimes. Also thanks for the answer, appreciate it. – I_Burn Sep 10 '20 at 19:55
-
1To be fair, I had to implement the equivalent manually once for a real-life program. Around 2005 or so. For underpowered cell phones. – Karl Knechtel Sep 10 '20 at 20:02
-
@KarlKnechtel atoi or to_string should be a very efficient solution, so wonder how you would improve on that. – JHBonarius Sep 11 '20 at 06:57
-
Well, you see, I was doing it in J2ME, and.... – Karl Knechtel Sep 14 '20 at 06:20
2 Answers
2
Here's one way to do it:
std::string int_to_string (int i)
{
bool negative = i < 0;
if (negative)
i = -i;
std::string s1;
do
{
s1.push_back (i % 10 + '0');
i /= 10;
}
while (i);
std::string s2;
if (negative)
s2.push_back ('-');
for (auto it = s1.rbegin (); it != s1.rend (); ++it)
s2.push_back (*it);
return s2;
}
I avoided using std::reverse
, on the assumption that it would be off-limits.

Paul Sanders
- 24,133
- 4
- 26
- 48
-
-
With teachers like his, iterators could as well be off limits, lol. Or `std::string`, and he'd want you to dynamically allocate a char array, hahaha. – JHBonarius Sep 11 '20 at 06:50
1
You can use '0' + i
to get the char value of 0 and offset it. I.e.
#include <cmath>
#include <string>
#include <iostream>
int main() {
int number = 12345678;
int nrDigits = std::log10(number)+1;
std::string output(nrDigits, '0'); // just some initialization
for (int i = nrDigits - 1; i >= 0; i--) {
output[i] += number % 10;
number /= 10;
}
std::cout << "number is " << output << '\n';
}

JHBonarius
- 10,824
- 3
- 22
- 41
-
Problems if number <= 0. I would count the digits a different way. – Paul Sanders Sep 10 '20 at 21:11
-
@PaulSanders exercise for the reader ;) of course this is not the best solution. But it's not my assignment and i would just use to_string. – JHBonarius Sep 11 '20 at 06:59