2011-10-15 304 views
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; } 

回答

1

看来你是比较const char*指针,而不是比较它们的内容。使用strcmpstd::string按字母顺序比较字符串。