1

名前と評価の両方でソートされたリンクリストを作成しようとしています。レーティングの並べ替え部分では、すべてが正しい順序になりますが、何らかの理由で、アルファベットの並べ替えでは何も正しい順序になりません(または逆の順序になります)。List :: Insertのアルファベットソート部分がprintByRating()関数を壊すことがあります。誰か助けてくれませんか?

これが私の挿入関数です:

void List::insert(const Winery& winery)
{
    Node * prev = NULL;
    Node * curr = NULL;
    Node * newNode = new Node(winery);
    newNode->nextByName = NULL;
    newNode->nextByRating = NULL;

    //sort by name
    curr = headByName;

    while (curr!=NULL && curr->item.getName() < newNode->item.getName())
    {
        prev = curr;
        curr = curr->nextByName;
    }

    newNode->nextByName = curr;
    if(prev == NULL)
        headByName = newNode;
    else
        prev->nextByName = newNode;

    //sort by rating
    curr = headByRating;

    while (curr!=NULL && curr->item.getRating() > newNode->item.getRating())
    {
        prev = curr;
        curr = curr->nextByRating;
    }

    newNode->nextByRating = curr;
    if(prev == NULL)
        headByRating = newNode;
    else
        prev->nextByRating = newNode;
}

ワイナリークラスで利用できる関数は次のとおりです。

const char * const getName() const { return name; }
const char * const getLocation() const { return location; }
const int getAcres() const { return acres; }
const int getRating() const { return rating; }
4

1 に答える 1

1

const char*ポインタの内容を比較するのではなく、ポインタを比較しているようです。strcmpまたはを使用std::stringして、文字列を辞書式に比較します。

于 2011-10-15T17:46:56.260 に答える