Velocity Reviews > C++ > Numerical value of a string

Numerical value of a string

farah727rash@gmail.com
Guest
Posts: n/a

 10-13-2006
Hi all,

I am trying to find the numerical value of a string that stores a two
digit number. I have found the numerical value of a char as:

char character;
cin >> character;
int number = character - 48; // Computing the numberical value of
character entered
cout << "The number you entered is: " << number << endl << endl;

How do I do the same and find the numerical value of a string storing 2
digits? I know a way to do this using character arrays:
for ( ; *str != '\0' ; str++)
num = (num * 10) + (*str - 4;

But, I am not supposed to use if statements, character arrays,
apstrings, or atoi in this program.

I am stumped. Any ideas?

Thanks,
Farah.

mlimber
Guest
Posts: n/a

 10-13-2006
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> I am trying to find the numerical value of a string that stores a two
> digit number. I have found the numerical value of a char as:
>
> char character;
> cin >> character;
> int number = character - 48; // Computing the numberical value of
> character entered
> cout << "The number you entered is: " << number << endl << endl;
>
> How do I do the same and find the numerical value of a string storing 2
> digits? I know a way to do this using character arrays:
> for ( ; *str != '\0' ; str++)
> num = (num * 10) + (*str - 4;
>
> But, I am not supposed to use if statements, character arrays,
> apstrings, or atoi in this program.
>
> I am stumped. Any ideas?

See this FAQ:

http://www.parashift.com/c++-faq-lit....html#faq-39.2

Cheers! --M

Tom Smith
Guest
Posts: n/a

 10-13-2006
mlimber wrote:
> (E-Mail Removed) wrote:
>> I am trying to find the numerical value of a string that stores a two
>> digit number.

>
> See this FAQ:
>
> http://www.parashift.com/c++-faq-lit....html#faq-39.2
>
> Cheers! --M
>

Before c.l.c++ I had never seen a group whose FAQs were quite so FA, if you see
what I mean... This one seems to come up every 2 days, along with "I need to
write a dynamic array". I actually discovered the group through the FAQ, which
is still pretty much my first point of reference when something won't work.

Tom

farah727rash@gmail.com
Guest
Posts: n/a

 10-13-2006
But, I am not supposed to use if statements, character arrays,
apstrings, or atoi in this program. That's why I can't hit on any other
way to do this.

On Oct 13, 9:58 am, "mlimber" <(E-Mail Removed)> wrote:
> (E-Mail Removed) wrote:
> > I am trying to find the numerical value of a string that stores a two
> > digit number. I have found the numerical value of a char as:

>
> > char character;
> > cin >> character;
> > int number = character - 48; // Computing the numberical value of
> > character entered
> > cout << "The number you entered is: " << number << endl << endl;

>
> > How do I do the same and find the numerical value of a string storing 2
> > digits? I know a way to do this using character arrays:
> > for ( ; *str != '\0' ; str++)
> > num = (num * 10) + (*str - 4;

>
> > But, I am not supposed to use if statements, character arrays,
> > apstrings, or atoi in this program.

>
> > I am stumped. Any ideas?See this FAQ:

>
> http://www.parashift.com/c++-faq-lit...sues.html#faq-...
>
> Cheers! --M

Rolf Magnus
Guest
Posts: n/a

 10-13-2006
(E-Mail Removed) wrote:

> Hi all,
>
> I am trying to find the numerical value of a string that stores a two
> digit number. I have found the numerical value of a char as:
>
> char character;
> cin >> character;
> int number = character - 48; // Computing the numberical value of
> character entered

The result of this is implementation-defined. A portable version would be:

int number = character - '0';

You should also add some error handling.

> cout << "The number you entered is: " << number << endl << endl;
>
> How do I do the same and find the numerical value of a string storing 2
> digits? I know a way to do this using character arrays:
> for ( ; *str != '\0' ; str++)
> num = (num * 10) + (*str - 4;
>
> But, I am not supposed to use if statements, character arrays,
> apstrings, or atoi in this program.
>
> I am stumped. Any ideas?

I have no idea what "apstrings" are, but you could use a stringstream, like:

char character;
std::stringstream stream;
std::cin >> character;
stream << character;
std::cin >> character;
stream << character;
int number;
stream >> number;

LR
Guest
Posts: n/a

 10-13-2006
(E-Mail Removed) wrote:

> But, I am not supposed to use if statements,

character arrays,
> apstrings, or atoi in this program. That's why I can't hit on any other
> way to do this.

apstrings? Is this the thing that was written a few years ago for the
AP comp sci test? Not part of standard C++.

>
> On Oct 13, 9:58 am, "mlimber" <(E-Mail Removed)> wrote:
>
>>(E-Mail Removed) wrote:
>>
>>>I am trying to find the numerical value of a

>>>>string

Let's consider the word string. If in fact you're supposed to do this,
then perhaps you are supposed to use the std::string class? If not,
then perhaps the problem is misleadingly worded?

Have you looked into std::istringstream?

>>>>that stores a two
>>>digit number. I have found the numerical value of a char as:

>>
>>>char character;
>>>cin >> character;
>>>int number = character - 48; // Computing the numberical value of

Might
const int number = character - '0';
be better?

Shouldn't you check to see if the number is a digit before you do that?

>>>character entered
>>>cout << "The number you entered is: " << number << endl << endl;

>>
>>>How do I do the same and find the numerical value of a string storing 2
>>>digits? I know a way to do this using character arrays:
>>>for ( ; *str != '\0' ; str++)
>>> num = (num * 10) + (*str - 4;

Where I assume that you had something like:
char str[BIGENOUGH];

How did you plan on putting decimal digits into str?

>>>But, I am not supposed to use if statements, character arrays,
>>>apstrings, or atoi in this program.

Why not?

LR

Ron Natalie
Guest
Posts: n/a

 10-13-2006

>
> I have no idea what "apstrings" are, but you could use a stringstream, like:

apstrings were part of some classes that the Computer Science AP test
used up until they switched the programming tasks to Java around 2003.
They ap* classes were horrendous and not intended to be used other
than for teaching purposes for the test.

David Harmon
Guest
Posts: n/a

 10-13-2006
On 13 Oct 2006 07:42:44 -0700 in comp.lang.c++, "(E-Mail Removed)" <(E-Mail Removed)> wrote,
>But, I am not supposed to use if statements, character arrays,
>apstrings, or atoi in this program. That's why I can't hit on any other
>way to do this.

Do you have a list of things you _are_ supposed to use, or has your instructor got his head [censored]? How about strtol(), sscanf()
or std::istringstream?

int a(char *c, int v) {
return *c?a(c+1,v*10+(*c-'0')):v;
}

int main(int ac, char** av)
{
for(int ax=1; ax<ac; ++ax)
cout << a(av[ax],0) << '\n';
}

Bo Yang
Guest
Posts: n/a

 10-14-2006

(E-Mail Removed) wrote:
> Hi all,
>
> I am trying to find the numerical value of a string that stores a two
> digit number. I have found the numerical value of a char as:
>
> char character;
> cin >> character;
> int number = character - 48; // Computing the numberical value of
> character entered
> cout << "The number you entered is: " << number << endl << endl;
>
> How do I do the same and find the numerical value of a string storing 2
> digits? I know a way to do this using character arrays:
> for ( ; *str != '\0' ; str++)
> num = (num * 10) + (*str - 4;
>
> But, I am not supposed to use if statements, character arrays,
> apstrings, or atoi in this program.
>

I think you can use the boost::lexical_cast

std::string ch ;
cin >> ch ;
int number = boost::lexical_cast<int>(ch) ;

It is just simple !