I looked everywhere and can't find an answer to this specific question :(
I have a string date, which contains the date with all the special characters stripped away. (i.e : yyyymmddhhmm or 201212031204).
I'm trying to convert this string into an int to be able to sort them later. I tried atoi, did not work because the value is too high for the function. I tried streams, but it always returns -858993460 and I suspect this is because the string is too large too. I tried atol and atoll and they still dont give the right answer.
I'd rather not use boost since this is for a homework, I dont think i'd be allowed.
Am I out of options to convert a large string to an int ? Thank you!
What i'd like to be able to do :
int dateToInt(string date)
{
date = date.substr(6,4) + date.substr(3,2) + date.substr(0,2) + date.substr(11,2) + date.substr(14,2);
int d;
d = atoi(date.c_str());
return d;
}
You're on the right track that the value is too large, but it's not just for those functions. It's too large for an int
in general. int
s only hold up to 32 bits, or a maximum value of 2147483647 (4294967295 if unsigned). A long long
is guaranteed to be large enough for the numbers you're using. If you happen to be on a 64-bit system, a long
will be too.
Now, if you use one of these larger integers, a stream should convert properly. Or, if you want to use a function to do it, have a look at atoll
for a long long
or atol
for a long
. (Although for better error checking, you should really consider strtoll
or strtol
.)
Completely alternatively, you could also use a time_t
. They're integer types under the hood, so you can compare and sort them. And there's some nice functions for them in <ctime>
(have a look at http://www.cplusplus.com/reference/ctime/).