如何将sort函数应用于string.find()以按字母顺序打印结果?

时间:2015-06-13 20:05:30

标签: c++ function sorting

我有一个程序将文本文件读入结构(members- str author和str title),并为用户提供显示文件中的所有记录,搜索作者或搜索标题的选项。现在我需要将sort函数集成到此过程中,以便当用户按作者或标题搜索时,结果按字母顺序列出。

以下排序功能与我的showAll功能完美配合,但我完全不知道如何修改搜索功能以按字母顺序排列结果。

排序功能代码:

void sortByTitle(int counter){
    //variable
    int a, b, minIndex;
    string temp;


    for (a = 0; a < counter; a++){
        minIndex = a;
        for (b = a + 1; b < counter - 1; b++){
            if (books[b].title < books[minIndex].title){
                minIndex = b;
            }
       }
        if(minIndex != a) {
            temp = books[a].title;
            books[a].title = books[minIndex].title;
            books[minIndex].title = temp;
            cout << books[a].title << endl;
        }
    }
}

这是我目前的标题搜索功能:

int showBooksByTitle(int counter, string bookTitle){
    int recordCount = 0;
    //find the user-input string inside bookTitle
    for (int a = 0; a < counter; a++){ //loop through the whole file
       if (books[a].title.find(bookTitle) != string::npos){

            //print a matching record
            cout << books[a].title << " " << "(" << books[a].author << endl;

            //keep track of the number of matching records
            recordCount++;
        }
    }
    return recordCount;
}

我的赋值指定了这些函数头,搜索函数返回找到的记录数,并将数据读入结构(而不​​是向量)。所以我必须保留这些方面。

如何将选择排序应用于搜索功能,以便我可以按顺序打印记录?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

在这里设置

smallestIndex = index;

然后你检查是否

books[index].title < books[smallestIndex].title

您似乎正在尝试实施选择排序。可以找到一个很好的代码片段here

Furhtermore:

  • 我不认为需要在for循环之外声明loc。说for(int loc...
  • wikipedia上有大量排序算法,您可以使用std::sort
  • 在第二行中,您使用相同的变量隐藏index for循环。
  • 我不知道你如何存储books,但如果你使用std :: vector,你不必每次都通过counter。您可以使用books.size()