C++ C++;带数组的排序和二进制搜索问题

C++ C++;带数组的排序和二进制搜索问题,c++,sorting,C++,Sorting,我是一个初学者程序员,在解决这个问题时遇到了问题。作业要求使用此方法(greaterAlpha()),但我不完全确定目的是什么。有人能帮我让这个工作,并解释一下这个方法是用来做什么的吗 我应该修改之前的作业,从文件中读取并打印出带有点的姓名和编号**该插件是一个排序函数,它应该使用greaterAlpha()方法按字母顺序对姓氏进行排序。在所有这些之后,应该使用相同的greaterAlpha()方法循环使用一个键进行二进制搜索。(二进制搜索用于排序以进行比较,如果找到,则必须返回元素的下标;如果

我是一个初学者程序员,在解决这个问题时遇到了问题。作业要求使用此方法(greaterAlpha()),但我不完全确定目的是什么。有人能帮我让这个工作,并解释一下这个方法是用来做什么的吗

我应该修改之前的作业,从文件中读取并打印出带有点的姓名和编号**该插件是一个排序函数,它应该使用greaterAlpha()方法按字母顺序对姓氏进行排序。在所有这些之后,应该使用相同的greaterAlpha()方法循环使用一个键进行二进制搜索。(二进制搜索用于排序以进行比较,如果找到,则必须返回元素的下标;如果没有,则返回上一个测试元素下标的负数。)

#包括
#包括
#包括
#包括
使用名称空间std;
//*********************************************************************
类电话号码
{
私人:
国际区号,
前缀
行号;
public://方法是公共的
void setNumber(int区域、int pre、int num)
{
区域代码=区域;
前缀=pre;
lineNumber=num;
}
int getAreaCode()常量
{
返回区号;
}
int getPrefix()常量
{
返回前缀;
}
int getLineNumber()常量
{
返回行号;
}
istream&readPhone(istream&);//输入/输出函数
ostream&printPhone(ostream&)const;
};
//*********************************************************************
//返回istream&以便稍后可以使用它重载>>操作符
istream和PhoneNumber::readPhone(istream和fin)
{
返回fin>>区域代码>>前缀>>行号;
}
//*********************************************************************

//返回ostream&因此它可以用来重载您只是在问
greaterAlpha
方法的用途吗


如果是这样的话,你应该用它来比较两个
PhoneEntry
实例,你以前用
很多代码来回答一个问题。。。你试过缩小范围吗?使用一个非常小的数据集(即只有几个数据项)并在调试器中逐步完成代码。它将帮助您缩小问题的范围。我不清楚问题是什么。我不断发现selectionSort()方法的错误。按照下面的人所做的,我在方法本身上得到一个错误,声明Declaration与“void PhoneEntry::SelectSort(PhoneEntry*,int)”不兼容。我让程序的主要部分工作,只是选择排序对我不起作用。我在“entries”的selectionSort()方法上得到一个错误“阵列。它不喜欢方法头中的条目,它还说条目和元素是未定义的。为什么会这样?
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
//*********************************************************************
class PhoneNumber
{
    private:
        int areaCode,
            prefix,
            lineNumber;
    public:                              // the methods are public
    void setNumber(int area, int pre, int num)
    {
        areaCode = area;
        prefix = pre;
        lineNumber = num;
    }
    int getAreaCode() const
    {
        return areaCode;
    }
    int getPrefix() const
    {
        return prefix;
    }
    int getLineNumber() const
    {
        return lineNumber;
    }
    istream& readPhone(istream&);         // input/output functions
    ostream& printPhone(ostream&) const;
};
//*********************************************************************
// Returns istream& so it can be used to overload the >> operator later
istream& PhoneNumber::readPhone(istream& fin)
{
    return fin >> areaCode >> prefix >> lineNumber;
}
//*********************************************************************
// Returns ostream& so it can be used to overload the << opeator later
ostream& PhoneNumber::printPhone(ostream& fout) const
{
    fout << setw(4) << areaCode << "-" << prefix << "-" << lineNumber;
    return fout;
}
//*********************************************************************
class PhoneEntry
{
    private:
        string  lastName,
                firstName;
        PhoneNumber Number;
    public:
        void setNames(string last, string first)
        {
            lastName = last;
            firstName= first;
        }
        string getLastName() 
        {
            return lastName;
        }
        string getFirstName()
        {
            return firstName;
        }
        istream& readEntry(istream&);
        ostream& writeDots(ostream&, int);
        ostream& printEntry(ostream&);
        bool greaterAlpha(PhoneEntry&) const;
        void selectionSort(string, int);
};
//*********************************************************************
istream& PhoneEntry::readEntry(istream& fin)
{
    fin >> lastName >> firstName;
    Number.readPhone(fin);
    return fin;
}
//*********************************************************************
ostream& PhoneEntry::writeDots(ostream& fout, int length) 
{
    length = firstName.length();
    length += lastName.length();
    length += 2;
    //This line is causing the issue but WHY?

    if(length % 2 == 1)
    {
        fout << ".";
    }

    for(length; length <= 28; length++)
    {
        fout << " .";
        length++;
    }

    return fout;
}
//*********************************************************************
ostream& PhoneEntry::printEntry(ostream& fout) 
{
    int length = 0;

    fout << lastName << ", " << firstName;
    writeDots(fout, length);
    Number.printPhone(fout);

    return fout;
}
//*********************************************************************
bool PhoneEntry::greaterAlpha (PhoneEntry& x) const 
{
    bool flag;

    if (lastName > x.lastName)
        flag = true;
    else if ((lastName == x.lastName) && (firstName > x.firstName))
        flag = true;
    else 
        flag = false;

    return flag;
}
//*********************************************************************
void selectionSort(string name[], int elems) 
{ 
    int startScan, minIndex; 
    string strName; 
    for (startScan = 0; startScan < (elems - 1); startScan++) 
    { 
        minIndex = startScan; 
        strName = name[startScan]; 
        for(int index = startScan + 1; index < elems; index++) 
        { 
            if (name[index] < strName) 
            { 
                strName = name[index]; 
                minIndex = index; 
            } 
        } 
        name[minIndex] = name[startScan]; 
        name[startScan] = strName; 
    } 
} 
//*********************************************************************
int main()
{
   int count;
    const int MAX_CAPACITY = 500;
    PhoneEntry Entry[MAX_CAPACITY],
               EntryIn;
    bool flag = false;

    ifstream dataIn("phonenum.txt");

    if(!dataIn)
    {
        perror("phonenum.txt");
        exit(1);
    }

    count = 0;
    while (count < MAX_CAPACITY && EntryIn.readEntry(dataIn)) 
    {
        Entry[count++] = EntryIn;
    }

    dataIn.close();

    if (count == MAX_CAPACITY)
    {
        cerr << "Reached maximum capacity of " << MAX_CAPACITY << ", can't read anymore Phone Entries currently." << endl;
    }

    //EntryIn.greaterAlpha(Entry);
    selectionSort(Entry, count);

    if (flag) 
    {
        for (int i = 0; i < count; i++)
        {
            Entry[i].printEntry(cout) << endl;
        }
    }
    else 
        cerr << "Error with sort!" << endl;

    return 0;
}
void selectionSort(PhoneEntry[] entries, int elems) 
{
// ...
            PhoneEntry entry = entries[startScan];
// ... 
            if (entry.greaterAlpha(entries[index]))
//...  
} 
bool PhoneEntry::greaterAlpha (PhoneEntry& x) const 
{
    return  lastName > x.lastName
        || (lastName == x.lastName && firstName > x.firstName);
}