gpt4 book ai didi

c++ - 将 YYMMDD 转换为 YYYYMMDD 并对它们进行排序

转载 作者:行者123 更新时间:2023-11-28 03:00:31 25 4
gpt4 key购买 nike

#include <iostream>     // std::cout
#include <cstdlib>
#include <climits>
#include <algorithm>
#include <cmath>
#include <fstream>

using namespace std;

struct student{
int ID; // ID
string firstname; // first name
string lastname; // last name
int date; // YYMMDD

static bool sort_date(student a, student b){
if(a.date < 150000){
a.date += 20000000;
}
else{
a.date += 19000000;
}
if(b.date < 150000){
b.date += 20000000;
}
else{
b.date += 19000000;
}
return data1 < data2;
}

};

int main(){

student students[5];

students[0].date = 000101;
students[1].date = 951230;
students[2].date = 570509;
students[3].date = 120915;
students[4].date = 020324;

stable_sort(students, students + 5, student::sort_date);

ofstream file;
file.open("sort_date.txt");
for(int i = 0; i < 5; i++){
file << students[i].date << endl;
}

return 0;
}

这是我的程序,我有 YYMMDD 格式的日期,我想将它们转换为 YYYYMMDD 格式并对它们进行排序,但我的算法中存在我找不到的问题。

出于某种原因,文件中的排序输出如下所示:

570509
951230
65
8404
120915

我希望我的程序首先获取日期:

students[0].date = 000101;
students[1].date = 951230;
students[2].date = 570509;
students[3].date = 120915;
students[4].date = 020324;

然后将它们转换为YYYYMMDD并排序并以YYYYMMDD格式输出。但是输出有点错误,并且出于某种原因也将 101 转换为 65。

正确的输出应该是:

19570509
19951230
20000101
20020324
20120915

最佳答案

由于前导零,整数文字 000101 被解释为十进制 65 的八进制表示。

文字是在您的源代码中写出的数字。这不包括文件中的字符,或用户输入到 I/O 流中的字符。

任何以 0 开头的整数文字都是八进制整数文字。

要坚持使用十进制文字,不要使用前导零

students[0].date =    101;
students[1].date = 951230;
students[2].date = 570509;
students[3].date = 120915;
students[4].date = 20324;

如上所述,这是一种处理人类可读日期的奇怪方式(通常您会为此使用字符串,并将整数存储留给某些内部表示,例如 UNIX 时间戳)。

关于c++ - 将 YYMMDD 转换为 YYYYMMDD 并对它们进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20956345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com