PDA

View Full Version : Separate digits in C++


ranger
Feb9-06, 04:26 PM
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

Orefa
Feb9-06, 04:45 PM
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.

chroot
Feb9-06, 05:05 PM
If you're not required to use C++, consider using another language instead. Python, for example, can do such things quite easily.

In Python:

from string import join, zfill

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

- Warren

gerben
Feb10-06, 02:01 AM
You can make your own function that prints integers with a space between each digit (and the possible minus sign), like this:
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)
#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);
}

ranger
Feb16-06, 03:11 PM
Here is the program...(using 5 digits)



#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.

Orefa
Feb16-06, 03:21 PM
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.

chroot
Feb16-06, 03:24 PM
I also suggest using a for loop.

- Warren