Velocity Reviews > C++ > How to read a part of an integer

# How to read a part of an integer

panther
Guest
Posts: n/a

 05-03-2007
Hi,

I need to read part of an integer by another variable.
As example,
if user enter 761120921,
then, i = 761120921
j = 76
k = 112
l = 0921 as that.
can you explain how do i acheive this?

Zeppe
Guest
Posts: n/a

 05-03-2007
panther wrote:
> Hi,
>
> I need to read part of an integer by another variable.
> As example,
> if user enter 761120921,
> then, i = 761120921
> j = 76
> k = 112
> l = 0921 as that.
> can you explain how do i acheive this?
>

you need to split the number manually. At first, do you need 0921 or 921
as a last number? because if you don't want to loose the zero you have
to work at a string level. If you want to loose the zero, and you just
want to work generally with integers, you can just for example take the
last four digits by doing

i % 10000;

and then go for the high order digits by

i /= 10000;

Regards,

Zeppe

seank76
Guest
Posts: n/a

 05-03-2007
On May 3, 12:53 pm, panther <(E-Mail Removed)> wrote:
> Hi,
>
> I need to read part of an integer by another variable.
> As example,
> if user enter 761120921,
> then, i = 761120921
> j = 76
> k = 112
> l = 0921 as that.
> can you explain how do i acheive this?

panther's response is the right way to do it.
However, if you simply need to turn the integer into a string, you
could use itoa(int) or a some other comparable functions.

Marcus Kwok
Guest
Posts: n/a

 05-03-2007
panther <(E-Mail Removed)> wrote:
> I need to read part of an integer by another variable.
> As example,
> if user enter 761120921,
> then, i = 761120921
> j = 76
> k = 112
> l = 0921 as that.
> can you explain how do i acheive this?

One way would be to use the % and / operators. For example,

i = 761120921
j = i / 10000000
k = (i / 10000) % 1000
l = i % 1000

Another way would be to read the number in as a string, and use the
string::substr() function.

--
Marcus Kwok
Replace 'invalid' with 'net' to reply

Marcus Kwok
Guest
Posts: n/a

 05-03-2007
Marcus Kwok <(E-Mail Removed)> wrote:
> panther <(E-Mail Removed)> wrote:
>> I need to read part of an integer by another variable.
>> As example,
>> if user enter 761120921,
>> then, i = 761120921
>> j = 76
>> k = 112
>> l = 0921 as that.
>> can you explain how do i acheive this?

>
> One way would be to use the % and / operators. For example,
>
> i = 761120921
> j = i / 10000000
> k = (i / 10000) % 1000
> l = i % 1000

Actually it should be l = i % 10000 if you wanted the last 4 digits.

> Another way would be to read the number in as a string, and use the
> string::substr() function.

--
Marcus Kwok
Replace 'invalid' with 'net' to reply

Default User
Guest
Posts: n/a

 05-03-2007
seank76 wrote:

> On May 3, 12:53 pm, panther <(E-Mail Removed)> wrote:
> > Hi,
> >
> > I need to read part of an integer by another variable.
> > As example,
> > if user enter 761120921,
> > then, i = 761120921
> > j = 76
> > k = 112
> > l = 0921 as that.
> > can you explain how do i acheive this?

>
> panther's response is the right way to do it.
> However, if you simply need to turn the integer into a string, you
> could use itoa(int) or a some other comparable functions.

That is a non-standard function, and therefore is platform-specific and
off-topic in this group. There are a number of ways to accomplish this
with resorting to such things.

The best idea would be to use std::string and the capabilities from
sstream.

Brian

Jim Langston
Guest
Posts: n/a

 05-05-2007
"panther" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed) oups.com...
> Hi,
>
> I need to read part of an integer by another variable.
> As example,
> if user enter 761120921,
> then, i = 761120921
> j = 76
> k = 112
> l = 0921 as that.
> can you explain how do i acheive this?

It depends. It sounds to me like this is some type of part number with
different positions specifying different things. I once did this in a
retail system and realized when they ran out of space in the 2 byte int that
I should of use strings so they could use characters.

Anyway, it depends mostly becuase you said "if user enters..." which means
you are dealing with user input. I find the best way to deal with user
input is by characters, by strings. Once you get it in a string you can see
exactly what they entered.

That is, what if they etenered
071120921
when that gets put into an int it becomes
71120921
And now you have more of a headache, especially if you have different lenght
numbers they can enter. So, I would accept their input into a string.
Validate that all characters are numeric. Break up the characters into the
parts I want, load them in.

Untested pseudo type code:

int StrToInt( const std::string& Number )
{
std::stringstring Stream;
Stream << Number;
int Result;
Stream >> Result;
return Result;
}

std::string Number;
while ( std::cin >> Number && Number != "" )
{
if ( Number.length() != 9 )
{
std::cout << "Input must be 9 digits. Try again.\n";
break;
}
if ( ! isdigits( Number ) )
{
std::cout << "Only numbers 0-9 are allowed. Try again.\n";
break;
}
// at this point we know we have 9 numberic characters in Number
int j = StrToInt( Number.substr( 0, 2 ) );
int k = StrToInt( Number.substr( 2, 3 ) );
int l = StrToInt( Number.substr( 5, 4 ) );

// Do whatever with j, k and l here as integers
}

If you aren't dealing directly with user input but are receiving an int as
input, then I've just been blowing hot air

The general rule is: when dealing with user input treat it as
characters/strings as long as possible to validate it. That's the rule I

panther
Guest
Posts: n/a

 05-06-2007
On May 6, 3:42 am, "Jim Langston" <(E-Mail Removed)> wrote:
> "panther" <(E-Mail Removed)> wrote in message
>
> news:(E-Mail Removed) oups.com...
>
> > Hi,

>
> > I need to read part of an integer by another variable.
> > As example,
> > if user enter 761120921,
> > then, i = 761120921
> > j = 76
> > k = 112
> > l = 0921 as that.
> > can you explain how do i acheive this?

>
> It depends. It sounds to me like this is some type of part number with
> different positions specifying different things. I once did this in a
> retail system and realized when they ran out of space in the 2 byte int that
> I should of use strings so they could use characters.
>
> Anyway, it depends mostly becuase you said "if user enters..." which means
> you are dealing with user input. I find the best way to deal with user
> input is by characters, by strings. Once you get it in a string you can see
> exactly what they entered.
>
> That is, what if they etenered
> 071120921
> when that gets put into an int it becomes
> 71120921
> And now you have more of a headache, especially if you have different lenght
> numbers they can enter. So, I would accept their input into a string.
> Validate that all characters are numeric. Break up the characters into the
> parts I want, load them in.
>
> Untested pseudo type code:
>
> int StrToInt( const std::string& Number )
> {
> std::stringstring Stream;
> Stream << Number;
> int Result;
> Stream >> Result;
> return Result;
>
> }
>
> std::string Number;
> while ( std::cin >> Number && Number != "" )
> {
> if ( Number.length() != 9 )
> {
> std::cout << "Input must be 9 digits. Try again.\n";
> break;
> }
> if ( ! isdigits( Number ) )
> {
> std::cout << "Only numbers 0-9 are allowed. Try again.\n";
> break;
> }
> // at this point we know we have 9 numberic characters in Number
> int j = StrToInt( Number.substr( 0, 2 ) );
> int k = StrToInt( Number.substr( 2, 3 ) );
> int l = StrToInt( Number.substr( 5, 4 ) );
>
> // Do whatever with j, k and l here as integers
>
> }
>
> If you aren't dealing directly with user input but are receiving an int as
> input, then I've just been blowing hot air
>
> The general rule is: when dealing with user input treat it as
> characters/strings as long as possible to validate it. That's the rule I

Hi,

Thanks for all of you. I get the idea Jim. I beleive that is the way I
have to follow. Because i have to face the situations as you explain
their.
Again Thanks for you all.

panther
Guest
Posts: n/a

 05-08-2007
Hi,
now i have a new problem.
Here is my codes.

using namespace std;

int main()
{

string number,number1,number2,number3;

cin >> number;

while (number != "" ){

if (number.length() != 9)
{
cout <<"Input must be 9 digits. Try again.\n ";
break;
}

// if (! isdigit(number) )
// {
// cout <<" Only numbers 0-9 are allowed. Try again\n";
// break;
// }

else
{

number1 = number.substr(0,2);
number2 = number.substr(2,3);
number3 = number.substr(5,4);

int i = atoi(number1.c_str());
int j = atoi(number2.c_str());
int k = atoi(number3.c_str());
cout <<i<<endl;
cout <<j<<endl;
cout <<k<<endl;
break;
}
}

return 0;

}

The problem is isdigit() not work with the string. It for the
character. So how do i check the contain of the string?

Victor Bazarov
Guest
Posts: n/a

 05-08-2007
panther wrote:
> Hi,
> now i have a new problem.
> Here is my codes.
>
> [..]
> The problem is isdigit() not work with the string. It for the
> character. So how do i check the contain of the string?

Two ways. One is to enumerate all characters and call 'isdigit' for
each of them. The other is to try to convert the string into some
large enough number. If it succeeds, you got numbers only.

V
--