具有结构的字符串的冒泡排序

时间:2018-05-07 17:11:50

标签: c

我尝试对与结构和数组有关的字符串使用冒泡排序。基本上我想比较按字母顺序排列的每本书的标题。谁能告诉我我做错了什么?

struct Book
{
    /* Book details */
    char title[MAX_TITLE_LENGTH+1];   
    char author[MAX_AUTHOR_LENGTH+1]; 
    int  year;                        
};
void menu_print_database(void)
{
    char temp[MAX_AUTHOR_LENGTH+1];
    char title[no_books][MAX_TITLE_LENGTH+1];
    int i,sorted,swaps=0;
    int no_books;

    do
    {
        for (i=0; i<no_books; i++)
        {   
            if (strcmp(title[i-1], title[i]) > 0)
            {
                sorted=0;
                strcpy(temp, title[i+1]);
                strcpy(title[i-1], title[i]);
                strcpy(title[i], temp);
                swaps++;
            }   
        }
    } while (!sorted);

    for (i=0;i<no_books;i++){
        printf("Title: %s\n",book_array[i].title);
        printf("Author: %s\n",book_array[i].author);
        printf("Year: %d\n",book_array[i].year);
    }
}

1 个答案:

答案 0 :(得分:0)

1)title的内容尚未设置,但我认为您只跳过了该部分代码...此外,char title[no_books][MAX_TITLE_LENGTH+1];使用了一个名为{的变量{1}},仅在稍后定义。

2)在这里,您no_books时尝试访问title[-1]

i==0

3){for}循环之前for (i=0; i<no_books; i++) { if (strcmp(title[i-1], title[i]) > 0) 应设置为1(假设数组已排序,如果输入if语句,则将sorted设置为0)。

4)交换不正确:sorted应为strcpy(temp, title[i+1])