C++ C++;显示我使用字符串函数清除的数组索引名称的程序?

C++ C++;显示我使用字符串函数清除的数组索引名称的程序?,c++,C++,这是我练习任务的代码,我的代码有点问题,我的代码运行得很好,但问题是,函数:del_book(),用于删除程序中的特定书籍,因此如果我删除一本或多本书,它仍然显示以下内容: Book id: Book Title: Book author: Book price: 它正在删除元素,但仍然显示所有这些。有人能帮我吗。 这是密码 …c++ void del_book(book volume[5]) { string name; cout << &

这是我练习任务的代码,我的代码有点问题,我的代码运行得很好,但问题是,函数:
del_book()
,用于删除程序中的特定书籍,因此如果我删除一本或多本书,它仍然显示以下内容:

Book id:
Book Title:
Book author:
Book price:
它正在删除元素,但仍然显示所有这些。有人能帮我吗。 这是密码

…c++

void del_book(book volume[5])
    {
        string name;
        cout << "enter the name of the book which you want to delete" << endl;
        cin >> name;
        for (int i = 0; i < 5; i++)
        {
            if (name == volume[i].book_title)
            {
                volume[i].book_id.clear();
                volume[i].book_title.clear();
                volume[i].book_author.clear();
                volume[i].price.clear();
                break;
            }
        }
        cout << "book deleted!" << endl;
    }

    void disp_all(book volume[5])
    {
        cout << "\n=====================\ndisplaying all books\n=====================" << endl;
        for (int i = 0; i < 5; i++)
        {
            cout << "book no." << i + 1 << endl;
            cout << "book id: " << volume[i].book_id << endl;
            cout << "book title: " << volume[i].book_title << endl;
            cout << "book author: " << volume[i].book_author << endl;
            cout << "book price: " << volume[i].price << endl;
        }
    }
void del_书(书卷[5])
{
字符串名;
姓名;
对于(int i=0;i<5;i++)
{
如果(名称==卷[i]。书名)
{
卷[i].book_id.clear();
卷[i]。书名。清除();
卷[i]。图书作者。清除();
卷[i].price.clear();
打破
}
}

cout您的问题是清除了所有字符串,但没有消除数组中的元素,通过这种方式,
disp_all(book volume[5])
函数可以检索5个元素

如果书籍名称不等于空字符串,则可能的解决方案是在打印元素之前进行验证

另一个更有用的解决方案是使用标准库的标准容器之一。 例如,您可以将
std::list
std::map
用于商店检索图书收藏。
因此,当您需要删除某个项目时,可以使用所用容器的实用程序。

您的问题是,您清除了所有字符串,但没有消除数组中的元素,通过这种方式,
disp_all(book volume[5])
函数可以检索任何5个元素

如果书籍名称不等于空字符串,则可能的解决方案是在打印元素之前进行验证

另一个更有用的解决方案是使用标准库的标准容器之一。 例如,您可以将
std::list
std::map
用于商店检索图书收藏。
因此,当您需要删除项目时,可以使用所用容器的实用程序。

请在问题中包括输入、输出和预期输出有时您使用的是
getline()
对于
书籍_title
,有时
cin>
。看起来可疑。这是因为当我多次使用getline时,它会忽略输出上的第一个字符,这是因为我使用了cin.ignore(),但如果我不使用ignore函数,它将在用户输入期间添加新行,因此我无法在第二次迭代时添加图书标题。是的,我知道。我想指出的是,您在
add\u book()中使用了
getline
<代码> > <代码>书签> <代码>,但在 Delphi Booe/Cube >中使用<代码> CIN >名称>代码,您将代码< >名称>代码>与 Booj>标题>代码>比较。由于这样,您将不会删除包含空白的标题的书。不知道C++中您已经知道或允许使用的部分,很难给您一个。完美答案。在使用数组时,通常会使用STL容器(首先是向量)这里。向量的长度不必像数组的长度一样恒定。因此,您可以从向量中删除元素,而不只是将它们设置为空字符串。请在问题中包括输入、输出和预期输出有时您使用的是
getline()
对于
书籍_title
,有时
cin>
。看起来可疑。这是因为当我多次使用getline时,它会忽略输出上的第一个字符,这是因为我使用了cin.ignore(),但如果我不使用ignore函数,它将在用户输入期间添加新行,因此我无法在第二次迭代时添加图书标题。是的,我知道。我想指出的是,您在
add\u book()中使用了
getline
<代码> > <代码>书签> <代码>,但在 Delphi Booe/Cube >中使用<代码> CIN >名称>代码,您将代码< >名称>代码>与 Booj>标题>代码>比较。由于这样,您将不会删除包含空白的标题的书。不知道C++中您已经知道或允许使用的部分,很难给您一个。完美答案。在使用数组时,通常会在这里使用STL容器(首先是向量)。向量的长度不必像数组的长度一样恒定。因此,您可以从中删除元素,而不只是将它们设置为空字符串。