C++ 按出发地和目的地对航班进行排序

c++ sort flights by departure and destination

本文关键字:排序 出发地 目的地 C++      更新时间:2023-10-16

我有一个学校项目。需要读取文件并按目的地、出发(24 小时格式)、航班号和登机口号进行排序。我试图排序,但没有用。. 我是编程新手,如果有人可以帮助我,我将不胜感激。

// Name        : Flight.h
#pragma once
#include <iostream>
#include <string>
#include <vector>
using std::string;
class Flight
{
private:
    string flightNo;
    string destination;
    string departure;
    string gateNo;
public:
    Flight(void);
    ~Flight(void);
    void readingFile();
    void writingFile();
};
// Flight.cpp
#include "Flight.h"
#include <fstream>
#include <cstring>
using namespace std;
Flight::Flight(void)
{
}
Flight :: ~Flight(void)                 
{
}
void Flight :: readingFile()
{
    string FileName;
    string line;
    cout << "Enter a file name: " << endl;  
    cin >> FileName;
    ifstream inFile(FileName.c_str());
    if (inFile.is_open())
    {
        while (getline( inFile, line))
        {
            cout << line <<endl;
        }
        inFile.close();
    }else
        cout << "File is not open!" <<endl;
}
//Sort.h  
#pragma once
#include "Flight.h"
#include <vector>

// Sort class
class Sort
{
protected:
    // number of comparisons performed in sort function
    unsigned long num_cmps;
public:
    // main entry point
    //virtual void sort(vector<Flight>& data) = 0;     
    void sortflights();
    // returns number of comparisons
    unsigned long getNumCmps();
    // resets the number of comparisons
    void resetNumCmps();
};
// SelectionSort class
class SelectionSort : public Sort
{
public:
    // main entry point
    void sort(std::vector<Flight>& data);
};
class MergeSort : public Sort
{
    // main entry point
    void sort(std::vector<Flight>& data);
};

//Sort.cpp
#include "Sort.h"
#include <iostream>
using namespace std;
unsigned long Sort::getNumCmps()
{
    return num_cmps;
}

void Sort::resetNumCmps()
{
    num_cmps = 0;
}
void Sort :: sortflights()
{
    int choose;
    cout<<"Choose an option!"<<endl;
    cout<<"PRESS 1 FOR SORT BY DESTINATION"<<endl;
    cout<<"PRESS 2 FOR SORT BY DEPARTURE"<<endl;
    cout<<"PRESS 3 FOR SORT BY FLIGHT NUMBER"<<endl;
    cout<<"PRESS 3 FOR SORT BY GATE NUMBER"<<endl;
    cin>>choose;
    if(choose==1)
    {
        vector<string> destination;
        for(int i=0; i<destination.size(); i++)
        {
            string elem1=destination[i];
            string elem2=destination[i+1];
            if (strcmp(elem1.c_str(),elem2.c_str())>0)
            {
                cout << elem1<<endl ;
            }
            else
                cout << elem2<<endl ;
            cout << "Number of iteration = " << i << endl;
        }
    }
    else if(choose==2)
    {

        vector<string> departure;
        for(int i=0; i<departure.size(); i++)
        {}

首先,航班号和登机口号没有理由是字符串。 它们只是数字。将字符串从文件转换为 int。如果你不能使用 stl,你只需要将日期时间保留为字符串,我想:(

把它分成几块。您需要三种不同的比较:数字、日期时间和词典,具体取决于您排序的内容。

数字

排序只是数字比较:if( a < b )

词典排序相对简单。字符只是映射到存储在某处的字形的 8 位数字。您可以像比较整数一样逐个字符比较字符串。找到彼此不同的字符后,您可以比较字符并确定哪个更大。

没有 stl 的日期时间会很棘手。您必须找到一种方法将字符串解析为可以比较的内容。谷歌解析该字符串的方法。

唯一剩下的就是你的排序算法。访问维基百科关于插入排序、合并排序、快速排序和选择排序的页面。它们详细描述了每种算法的工作原理,并且在大多数情况下,它们的实现是伪代码。

关于这个问题,真的没什么好说的了。