gpt4 book ai didi

c++ - 在结构中排序和验证日期 (YYMMDD)

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

#include <iostream>
#include <cstdlib>

using namespace std;

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

bool is_num(const string &s);
void input_year(student &students);
int length_of_int(int input);

int main(){
student students[100];
int amount_of_students;
cin >> amount_of_students;
for(int i = 0; i < amount_of_students; i++){
cout << "Enter student's ID" << endl;
cin >> students[i].ID;
cout << "Enter student's first name" << endl;
cin >> students[i].firstname;
cout << "Enter student's last name" << endl;
cin >> students[i].lastname;
cout << "Enter student's date of birth" << endl;
input_year(students[i]);
}
return 0;
}

void input_year(student &students){
while(true){
string input;
cin >> input;
if(is_num(input)){
students.date = atoi(input.c_str());
if(length_of_int(students.date) != 6){
cout << "Error, try again." << endl;
}
else{
if()
break;
}
}
else{
cout << "Error, try again." << endl;
}
}
}

bool is_num(const string &s){
string::const_iterator it = s.begin();
while(it != s.end() && isdigit(*it)){
++it;
}
return !s.empty() && it == s.end();
}

int length_of_int(int input){
int length = 0;
while(input > 0){
length++;
input /= 10;
}
return length;
}

我有以下代码,我想按 DATE 对结构的数组 (students[100]) 进行排序,并验证日期的输入。

我现在要做的是验证它是 6 个字符和一个数字。但是,我还想验证它以检查它是否是有效日期(01-12 个月,01-30 天)。

至于年份,我知道有一个可能的问题,比如:501022 可能表示 1950 年和 2050 年,但这个有一个特例。

如果年份是50-99,则指19xx,如果是00-14,则指20xx。

我需要对此进行验证以及按升序或降序对其进行排序的方法。

最佳答案

要对数组进行排序,您可以使用 qsort() 例如 ( http://www.cplusplus.com/reference/cstdlib/qsort/ )。它看起来像下面这样:

函数调用:

qsort (students, amount_of_students, sizeof(student), func_ptr);

比较函数:

typedef int (*compar)(const void*,const void*);
compar func_ptr;

int sort_ascending (const void* student1, cont void* student2)
{
long value1=student1->date;
long value2=student2->date;

if(value1 < 150000)
{ value1 += 20000000;} else { value1 += 19000000;}
if(value2 <150000)
{ value2 += 20000000;} else { value2 += 19000000;}
return value1 - value2;
}

对于 sort_descending() 你必须切换 value1 和 value2。

编辑:包括

If the year is from 50-99, it refers to 19xx, if it's from 00-14, it refers to 20xx.

提示:我会使用 long 而不是 int 作为日期(int 有 2 或 4 或 8 字节,具体取决于系统)

关于c++ - 在结构中排序和验证日期 (YYMMDD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20924575/

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