HELP - how to convert a string representation of a number to a number ?

C

cpptutor2000

Could some C++ guru please help me with this problem?
Suppose I have a string representation of a very large number
as: char *strNum = "1234";

now suppose I want to store this number with each digit as an
element of a large array: unsigned int Num[4];

Now I want to transfer them digit by digit to the unsigned int
array, with code as the following, but it does NOT work.

for(int i = 0; i < 4; i++){
if(isdigit(strNum) Num = strNum;
}

If I now print out the contents of the array Num, I get only
the ASCII values to be printed out, in this case:
49, 50, 51, 52

How do I make sure that the values stored are the digits 1, 2,
3 and 4, and NOT the ASCII values.

Could someone please point out what exactly I am doing wrong?
Thanks in advance for your help.
 
L

Larry I Smith

Could some C++ guru please help me with this problem?
Suppose I have a string representation of a very large number
as: char *strNum = "1234";

now suppose I want to store this number with each digit as an
element of a large array: unsigned int Num[4];

Now I want to transfer them digit by digit to the unsigned int
array, with code as the following, but it does NOT work.

for(int i = 0; i < 4; i++){
if(isdigit(strNum) Num = strNum;
}

If I now print out the contents of the array Num, I get only
the ASCII values to be printed out, in this case:
49, 50, 51, 52

How do I make sure that the values stored are the digits 1, 2,
3 and 4, and NOT the ASCII values.

Could someone please point out what exactly I am doing wrong?
Thanks in advance for your help.


IF you only have to handle ASCII chars, this will work:

if(isdigit(strNum) Num = strNum - 48;

It may not work with charsets other than ASCII.

Regards,
Larry
 
J

Jakob Bieling

IF you only have to handle ASCII chars, this will work:

if(isdigit(strNum) Num = strNum - 48;

It may not work with charsets other than ASCII.


Doesn't the Standard guarantee, that the numbers 0-9 of the
character set will be continous? I think I read that somewhere, but I am
not sure. If so, the above would be portable, if you used '0' instead of
48:

if(isdigit(strNum) Num = strNum - '0';

Maybe someone can verify if my above statement is correct.

regards
 
C

Chris Theis

Jakob said:
IF you only have to handle ASCII chars, this will work:

if(isdigit(strNum) Num = strNum - 48;

It may not work with charsets other than ASCII.



Doesn't the Standard guarantee, that the numbers 0-9 of the
character set will be continous? I think I read that somewhere, but I am
not sure. If so, the above would be portable, if you used '0' instead of
48:

if(isdigit(strNum) Num = strNum - '0';

Maybe someone can verify if my above statement is correct.

regards


Yes Jakob, you're right. The standard mandates that the value of each
character in the list of decimal digits starting from '0' shall be
greater than the previous by one .

Cheers
Chris
 
L

Larry I Smith

Jakob said:
IF you only have to handle ASCII chars, this will work:

if(isdigit(strNum) Num = strNum - 48;

It may not work with charsets other than ASCII.


Doesn't the Standard guarantee, that the numbers 0-9 of the
character set will be continous? I think I read that somewhere, but I am
not sure. If so, the above would be portable, if you used '0' instead of
48:

if(isdigit(strNum) Num = strNum - '0';

Maybe someone can verify if my above statement is correct.

regards


Does that apply to the EBCDIC charset? Actually it does. :)

You may be correct (that 0-9 must be contiguous per the Std).
Even if they're not, your approach still works fine for ASCII
(and is a better solution).

Larry
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top