开发者

Char to Int conversion in c

开发者 https://www.devze.com 2023-04-05 10:56 出处:网络
How can I convert a char to Int? This is what I have done so far. Thanks scanf(\"%s\", str ); printf(\"str: %s\\n\", str);

How can I convert a char to Int?

This is what I have done so far.

Thanks

scanf("%s", str );

printf("str: %s\n", str);

int i;
if(isdigit(*str))
    i = (开发者_JAVA百科int) str;
else {
    i = 3;
}

test case

7
str: 7
i: 1606415584  


Edit: I could have sworn the post was tagged C++ at the start. I'll leave this up in case the OP is interested in C++ answers and the change to C tag was an edit.

A further option, which may be advanced given the question, is to use boost::lexical_cast as so:

scanf("%s", str );

printf("str: %s\n", str);

int i = boost::lexical_cast<int>( str );

I have used boost::lexical_cast a lot to convert between types, mostly strings and primitives when reading in user-defined properties. I find it an invaluable resource.

It's worth noting that boost::lexical_cast can throw exceptions, and these should be appropriately handled when you use the call. The link I posted at the start of this answer contains all the information you should need regarding that.


If you want to parse an integer from a string:

i = atoi(str);


You're mixing the character and string concepts here. str is a string, and str[0] (which is equivalent to *str) is a character, the first character of that string.

If you want to extract an integer from the string, try this

sscanf(str,"%d",&i);

Your

i = (int) str;

forces 4 bytes that start at the same memory address str (and for completeness sake, str is a pointer) starts to be interpreted as an integer, and that's why you get a result that's totally off.


You can convert strings to int by using sscanf

sscanf(str,"%d",&i);

http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/


i = (int) str;

is a wrong way to convert a string to number, because It copies an address to i variable (the address which str is pointing to it).

You could try this:

i = atoi(str);

or

sscanf(str,"%d",&i);

to convert your string into a number.

Note that you cannot make sure the entered string is numeric by just isdigit(*str), because it only check the first character of the string.

One possible way is this:

int isNumeric = 1;
for(int j=0;j<length(str);j++)
   if( isdigit(str[j]) == false)
   {
      isNumeric = 0;
      break;
   }

if(isNumeric)
{
   // Code when the string is number 
   // (e.g. convert the string to a number with atoi function)
}
else
{
   // Code when the string is NOT number 
   // (e.g. show a error message)
}
0

精彩评论

暂无评论...
验证码 换一张
取 消