C/C++ What are some solutions for properly converting char to int in C++?

  • Thread starter Thread starter Peon666
  • Start date Start date
AI Thread Summary
The code snippet provided attempts to convert characters from a character array to integers, but it outputs unexpected values due to uninitialized variables. The character array should be initialized with meaningful values to avoid garbage data. The output values correspond to ASCII representations of the characters, where characters like '1' and '0' need to be converted to their integer equivalents. To achieve this, characters should be checked to ensure they fall within the '0' to '9' range, and then converted by subtracting '0' from them. For more complex strings, functions like sscanf() can be used for parsing, while strtok() can help split strings into tokens, and strtol() can convert those tokens into integers. The discussion emphasizes the importance of proper initialization and parsing techniques in C/C++ programming.
Peon666
Messages
107
Reaction score
0
What could be wrong with this code?:

Code:
int arr[10];
char arr2[10];
for (int i=0; i<10; i++)
{
        arr[i]=(int)arr2[i];
}

When I output the supposedly converted array, it's outputs some crazy numbers.
?
 
Technology news on Phys.org
I assume you are using C/C++ here, in which case you should note that automatic variables (variables defined on the stack) are not initialized. Try initialize your character array with some sensible values.
 
It's arr2[10]="P 1 (a tab) 0";
 
And it outputs: 80 49 9 48 0 0 0 0 0 0

I want to get 1 and 0 as integers
 
Characters are internally represented by a byte that contains the code for the character in question. See for instance http://en.wikipedia.org/wiki/ASCII.

To get the digit of the character you would normally first test if the character is in the range '0' to '9' and then subtract '0'. Something like this:

Code:
char ch = ...;
if (ch >= '0' && ch <= '9') {
  int digit = ch - '0';
  // do whatever you need with digit
}

Alternatively you can use some of the methods from the standard ctype.h library (see for instance http://www.cplusplus.com/reference/clibrary/cctype/).
 
Peon666 said:
It's arr2[10]="P 1 (a tab) 0";

Peon666 said:
And it outputs: 80 49 9 48 0 0 0 0 0 0

80 = 'P'
49 = '1'
9 = tab
48 = '0'
0 = end of string

It is working exactly right, assuming you are working on an ASCII machine.

I want to get 1 and 0 as integers
Then you want to do something other than a simple cast.
 
Alright. The problem is solved to some extend. But a little more problem:

For the given string [P 1 (tab) 0] it outputs fine: 1 0
But when I have a string [P 2 (tab) 34] it outputs: 2 3 (no four.)

What could be the problem?
 
You need to learn how to parse. Casting is not what you want here.
 
To add to the above:

In this case, the function sscanf() will do the trick.

For more complicated parsing problems, you will probably need to learn how to use things like strtok() to split the string into tokens and things like strtol() to convert the numeric tokens into integers.
 
Back
Top