C++ 将字符串转换为int(C+;+;)

C++ 将字符串转换为int(C+;+;),c++,string,int,atoi,C++,String,Int,Atoi,我到处找,找不到这个具体问题的答案:( 我有一个字符串date,其中包含去掉所有特殊字符的日期(即:yyyymmddhhmm或201212031204) 我正在尝试将此字符串转换为int,以便以后能够对其进行排序。我尝试了atoi,但不起作用,因为该函数的值太高。我尝试了streams,但它总是返回-858993460,我怀疑这是因为字符串太大。我尝试了atol和atol,但它们仍然没有给出正确的答案 我不想用boost,因为这是做作业用的,我想我是不被允许的 是否无法将大字符串转换为int?

我到处找,找不到这个具体问题的答案:(

我有一个字符串date,其中包含去掉所有特殊字符的日期(即:yyyymmddhhmm或201212031204)

我正在尝试将此字符串转换为int,以便以后能够对其进行排序。我尝试了atoi,但不起作用,因为该函数的值太高。我尝试了streams,但它总是返回-858993460,我怀疑这是因为字符串太大。我尝试了atol和atol,但它们仍然没有给出正确的答案

我不想用boost,因为这是做作业用的,我想我是不被允许的

是否无法将大字符串转换为int? 谢谢大家!

我希望能够做到:

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;

}

你得到负数,因为<代码> 201212031204 太大,不适合<代码> int <代码>。考虑使用<代码>长长 S/P>


BTW,您也可以排序字符串。< /P> < p>您得到负数,因为<代码> 201212031204 < /COD>太大,不适合<代码> int <代码>。考虑使用<代码>长长 S/P>


顺便说一句,你也可以对字符串进行排序。

你说得对,这个值太大了,但不仅仅是对于那些函数。对于
int
来说,它通常太大了。
int
s最多只能保存32位,或者最大值2147483647(如果没有签名,则为4294967295).A
long
保证足够大,可以容纳您正在使用的数字。如果您恰好在64位系统上,A
long
也将足够大

现在,如果你使用一个较大的整数,一个流应该正确地转换。或者,如果你想使用一个函数来完成它,请查看<代码>长期长或<代码> ATOL > <代码>长。(对于更好的错误检查,你应该真正考虑<代码> STORTON/<代码>或<代码> Stotol < /代码>)


或者,你也可以使用
时间
。它们是隐藏的整数类型,因此你可以对它们进行比较和排序。
中有一些很好的函数(请看一看).

您认为该值太大是正确的,但它不仅仅适用于那些函数。对于
int
而言,它通常太大。
int
s最多只能保存32位,或者最大值为2147483647(如果未签名,则为4294967295).A
long
保证足够大,可以容纳您正在使用的数字。如果您恰好在64位系统上,A
long
也将足够大

现在,如果你使用一个较大的整数,一个流应该正确地转换。或者,如果你想使用一个函数来完成它,请查看<代码>长期长或<代码> ATOL > <代码>长。(对于更好的错误检查,你应该真正考虑<代码> STORTON/<代码>或<代码> Stotol < /代码>)

或者,你也可以使用
时间
。它们是隐藏的整数类型,因此你可以对它们进行比较和排序。在
中有一些很好的函数(请看一看)

请注意,如前所述,您正在使用的数字将不适合32位


请注意,如前所述,您正在处理的数字将不适合32位。

如果您只需要对它们进行排序,请将它们作为字符串进行排序。为什么不将其返回到日期/时间结构中?无法在int中存储那么多数字,因此需要更大的数据类型;使用与系统时间函数相同的形式似乎是合适的(
date\u t
iirc)你有64位变量数据类型吗?你得到的数据超过2010亿,这对于32位整数来说太大了。无符号32位整数的最大值是4294967295。@peachykeen,你说得对,使用日期/时间结构似乎更有意义。我只是有点困惑我可以在之后对这些结构进行排序。如果您只需要对它们进行排序,请将它们作为字符串进行排序。为什么不在日期/时间结构中返回它?无法在整数中存储那么多数字,因此需要更大的数据类型;使用与系统时间函数相同的形式似乎是合适的(
date\t
iirc)你有64位变量数据类型吗?你得到的数据超过2010亿,这对于32位整数来说太大了。无符号32位整数的最大值是4294967295。@peachykeen,你说得对,使用日期/时间结构似乎更有意义。我只是有点困惑我将能够在..之后对这些结构进行排序。您需要递增s。循环永不结束您需要递增s。循环永不结束。您还可以在cstdlib中定义compare(void,void)和使用sort(a,compare)available,还可以在cstdlib中定义compare(void,void)和使用sort(a,compare)available
typedef long long S64;

S64 dateToInt(char * s) {
    S64 retval = 0;
    while (*s) {
         retval = retval * 10 + (*s - '0');
         ++s;
    }
    return retval;
}