如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?

How to delete the book that have been input and how to make the title, language, and name doesn't error if we put space on it?

本文关键字:在上面 语言 出错 空格 标题 删除 何删除 输入 何使      更新时间:2023-10-16

谁能帮我制作一个新菜单来删除所有已输入的书籍?以及如何使标题,名称和语言可以用空格输入? 我已经搜索了有关它的其他问题,其中许多使用getline。但是我不明白如何在这样的课堂上使用它。

(对不起,我的语法不好,我的英语不是很好(

这是我制作的源代码。

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
class Book {
int number, year;
string language, name, title;
Book * head, * next;
public:
Book (string & name, string & title, int number, string & language, int year) {
head = NULL;
this -> name = name;
this -> title = title;
this -> language = language;
this -> number = number;
this -> year = year;
};
~ Book (void) {
delete head;
};
void display (void);
void add (void);
void dellete (string&);
};
void Book :: add (void) {
string name, title, language;
int year, number;
cout << endl << "Author:", cin >> name;
cout << "Title:", cin >> title;
cout << "Number of books:", cin >> number;
cout << "Language:", cin >> language;
cout << "Year of publication:", cin >> year;
Book * p = new Book (name, title, number, language, year);
p -> next = head;
head = p;
}
void Book :: display (void) {
Book * p = head;
while (p) {
cout << "----------------------------- n";
cout << "Author:" << p -> name << endl;
cout << "Title:" << p -> title << endl;
cout << "Number of books:" << p -> number << endl;
cout << "Language:" << p -> language << endl;
cout << "Year of publication:" << p -> year << endl;
cout << endl;
p = p -> next;
}
}
int main (int argc, char const ** argv) {
string blank = "";
Book * B = new Book (blank, blank, false, blank, 0);
int opt;
cout << "nBOOK STACKS n";
for (;;) {
cout << "1) Add a book.n";
cout << "2) Show all books.n";
cout << "3) Exit. nn";
cout << "Options:", cin >> opt;
switch (opt) {
            case 1:
                B -> add ();
break;
case 2:
B -> display ();
break;
case 3:
exit (0);
default:
continue;
}
}
return 0;
}

请帮助我获取代码,因为这是我的中期测试任务,我仍然是编程的初学者。谢谢。

如果要每行输入数据,下面是一个示例:

class Book
{
int number;
int year;
std::string language
std::string name;
std::string title;
public:
friend std::istream& operator>>(std::istream& input, Book& b);
//...
};
std::istream& operator>>(std::istream& input, Book& b)
{
std::string text_line;
std::getline(input, text_line);
std::istringstream  text_stream(text_line);
text_stream >> b.number >> b.year >> b.language >> b.name >> b.title;
return input;
}

如果每个数据项都在单独的行上,则可以将operator>>更改为:

std::istream& operator>>(std::istream& input, Book& b)
{
input >> b.number;
input >> b.year;
std::getline(input, b.language);
std::getline(input, b.name);
std::getline(input, b.title);
return input;
}

来自文件的示例输入:

std::vector<Book> library;
Book b;
while (data_file >> b)
{
library.push_back(b);
}