Separate Digits in C++: How to Place Spaces Between Numbers for Easier Output

  • Topic: C/C++ 
  • Thread starter Thread starter ranger
  • Start date Start date
  • Tags Tags
    C++
Join the discussion
Registration is free. Start your own thread to ask a follow-up.
7 replies · 35K views
ranger
Gold Member
Messages
1,687
Reaction score
2
If I take a six digit number and store it in one variable, how can I place spaces between each digit at the output. This would be so much easier if each digit were stored in separate variables.


--thanks
 
Physics news on Phys.org
If your number is not already in a string then first store it as a string using your favorite method (sprintf, string streams, anything you like). Then copy this string to another that is twice as long. Copy it one digit at a time and append a space after each digit.

Alternatively, process the number directly. It is an unsigned integer, right? So do "digit = number % 10", store the digit to a string (going right to left) as a character, add a space character between each one, divide "number /= 10" before proceeding with the next digit. Repeat 6 times.
 
If you're not required to use C++, consider using another language instead. Python, for example, can do such things quite easily.

In Python:

Code:
from string import join, zfill

n = 12345
print join( zfill(n, 6), ' ' )

- Warren
 
You can make your own function that prints integers with a space between each digit (and the possible minus sign), like this:
Code:
void rangers_integer_print(int n)
{
  stringstream s;
  char c;

  s << n;  

  while (s.get(c))  
	 cout << c << " ";
}


Here is a little test program using the function (I ran it and it seems to work fine)
Code:
#include <iostream>
#include <sstream>

using namespace std;

void rangers_integer_print(int n)
{
  stringstream s;
  char c;

  s << n;

  while (s.get(c))  
	 cout << c << " ";
}

void main()
{
  int n;

  cout << endl << "enter number: ";
  cin >> n;  

  rangers_integer_print(n);
}
 
Here is the program...(using 5 digits)


Code:
#include <iostream.h>

main()
{

	int num;              //user input
	int a,b,c,d,e,f,g,h;  //used for integer division and modulus operations

	cout <<"Enter a five digit number." <<endl;
	cin >> num;

	
	
	a = num/10000;           //   
        b = num%10000;         //             
        c = b/1000;              //             
	d = b%1000;              //            
	e = d/100;               //Integer and Modulus Operations
	f = d%100;              //             
	g = f/10;                //            
	h = f%10;              //  

    cout <<endl;
	cout <<a<<"   "<<c<<"   "<<e<<"   "<<g<<"   "<<h<<" ";
	cout <<endl;

	return 0;

}

I wrote this program using Visual C++ 6.0. When I run the program it works fine. But when I run the program using Turbo C++ I keep getting a negative number or some other number for the output when I enter high numbers ex-98765 i get -3 -2 -3 0 -7 as the out for Turbo C++. It works fine for lower number - 12345.

Any idea why this happens?

--thanks.
 
The old Turbo-C++ integer size must be 16 bits while the MS compiler uses 32 bits. Using "unsigned int" will help a little, using "unsigned long int" will help even more.
 
I also suggest using a for loop.

- Warren
 
if you use long int in turbo c++ it will give you the right answers instead of negative answer the reason is that int can not store a a high value of integers into it it has a limit so long int can help u


hope the answer satisfies you
regards
Engineer Asim Arshad