【问题标题】:How can I store predefined values sorted according to date in C++?如何在 C++ 中存储根据日期排序的预定义值?
【发布时间】:2018-08-07 18:23:09
【问题描述】:

我想将预定义(硬编码)值存储在 person 对象中,并按日期排序显示在屏幕上。我该如何实现?

这是问题和我的代码。

一个社团保存一个成员列表,并使用程序存储该列表。对于每个成员,记录以下信息

会员编号 姓 名字 该人加入社会的日期 他们是否仍然是会员 该程序需要提供三个选项 1) 输入会员的详细信息(当前或过去的会员)。可以按任何顺序输入会员。您可以假设会员编号可从某些现有列表中获得,因此只需将其与其他数据一起输入程序即可。

2) 提示当前日期并生成已成为会员至少 10 年(目前仍是会员)的人员列表作为输出列表应按加入日期的顺序排列,并根据时长进行拆分他们已经是会员(50+年,40+年等)如果有超过一个人在同一天加入,他们应该按姓氏的字母顺序给出,如果他们有相同的姓氏,名字。列表应该通过将成员集按所需顺序排序来生成。

3) 提示输入会员编号并将此人的会员资格标记为非当前会员。

输出应该是这样的

Long-standing members at 20/02/2012

50+years
mem no date joined name
432 21/07/1963 Xerxes Smith
3103 20/02/1968 Aloysius Baker

40+years
mem no. date joined name
4934 21/02/1968 Hermione Turner
0123 08/06/1975 Bartholomew Wright
1498 08/06/1975 Ermintrude Wright

30+year

—————————————————————————————————

【问题讨论】:

  • 以计算机可以理解的格式存储您的日期。显示时将其转换为字符串。您应该使用比较方法对 int 或某种结构或类进行排序。
  • 或交替/和使用qsortstd::qsort。此时您需要做的就是编写一个函数来比较您存储的两个日期。
  • @zzxyz 它是C++,而不是C。首选std::sort
  • @Fureeish 无法使用 std::sort 进行排序。我必须实现自己的排序方法。我已经做到了,但无法对代码中硬编码的现有列表进行排序。它在 existspersons() 函数中跨度>
  • @zzxyz 我不能使用qsort或std sort。我必须实现自己的排序函数。请告诉我如何对existpersons()函数中提到的代码中的现有列表进行排序

标签: c++ arrays sorting object quicksort


【解决方案1】:

我只是给你冒泡排序。

#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;

class person
{
public:
  person(string doj)
  {
    memset(&m_doj, 0, sizeof(tm));
    std::istringstream ssDate(doj);
    ssDate >> get_time(&m_doj, "%d/%m/%Y");
  }
  tm m_doj;
  bool operator> (person &person2)
  {
    return mktime(&m_doj) > mktime(&person2.m_doj);
  }
  void output()
  {
    cout << put_time(&m_doj, "%d/%m/%Y") << "\n";
  }
};

void swap(person *xp, person *yp)
{
  person temp = *xp;
  *xp = *yp;
  *yp = temp;
}

void bubbleSort(person arr[], int n)
{
  int i, j;
  for (i = 0; i < n - 1; i++)

    // Last i elements are already in place   
    for (j = 0; j < n - i - 1; j++)
      if (arr[j] > arr[j + 1])
        swap(&arr[j], &arr[j + 1]);
}

void main()
{
  person people[5] = { person("22/02/2012"), person("21/03/2012"), person("21/02/2018"), person("21/02/1969"), person("20/02/2012") };
  bubbleSort(people, 5);
  for (int i = 0; i < 5; ++i)
  {
    people[i].output();
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2018-06-26
    • 2020-04-12
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多