簡體   English   中英

C ++數組結構

[英]C++ Array structure

我用c ++制作了一本書存儲程序。 它是循環3次以上的程序,因此用戶可以輸入3本書但是現在我希望用戶選擇用戶想要輸入的書的數量,我不知道如何去做。 這將是有幫助的,這是我的代碼

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

struct Book{
    string name;
    int release;
}Issue[3];

int main(){
    //local variable
    int i;
    string release_dte;
    //interface
    cout << "Welcome to Book Storage CPP" << endl;
    //for handler
    for (i = 0; i < 3; i++){
        cout << "Book: ";
        getline(cin, Issue[i].name);
        cout << "Release Date: ";
        getline(cin, release_dte);
        Issue[i].release = atoi(release_dte.c);
    }
    cout << "These are your books" << endl;
    for ( i = 0; i < 3; i++){
        cout << "Book: " << Issue[i].name << " Release Date: " << Issue[i].release << endl;
    }
    system("pause");
    return 0;
}

最好的方法是使用std :: vector。 例如

#include <vector>
//...

struct Book{
    string name;
    int release;
};

int main()
{
   size_t issue_number;

   std::cout << "Enter number of books: ";
   std::cin >> issue_number;

   std::vector<Book> Issue( issue_number );
//...    

否則,您應該自己動態分配數組。 例如

Book *Issue = new Book[issue_number];

在程序結束時,您需要釋放分配的內存

delete []Issue;

擴展(並批評)弗拉德的回答,如果你使用流迭代器,你將不需要事先預定數量。 您還可以重載Book的流提取器,以便迭代器正確實現提取:

std::istream& operator>>(std::istream& is, Book & b)
{
    if (!is.good())
        return is;

    std::string release_date;

    if (std::getline(is >> std::ws, b.name) &&
        std::getline(is >> std::ws, release_date))
    {
        b.release = std::stoi(release_date);
    }

    return is;
}

稍后在main()你仍然會使用std::vector<Book> ,只使用構造函數的迭代器重載來生成對象:

int main()
{
    std::vector<Book> Items(std::istream_iterator<Book>{std::cin},
                            std::istream_iterator<Book>{});

    ...
}

對於打印,您可以使插入器過載,從而實現打印邏輯:

std::ostream& operator<<(std::ostream& os, const Book & b)
{
    return os << "Book: "          << b.name << '\n'
              << " Release Date: " << b.release;
}

並使用std::copy調用此插入器:

std::copy(Items.begin(), Items.end(),
    std::ostream_iterator<Book>(std::cout << "These are your books: \n", "\n"));
   #include <iostream>
   #include <string>
   #include <vector>

   using namespace std;

   struct Book {
          string name;
          int release;
          Book(string _name, int _release) {
                 name = _name;
                 release = _release;
          }
   };

   int main() {
          vector<Book> books;
          string name;
          int release;

          while(cin >> name >> release) {
                 books.push_back(Book(name,release));
          }

          for(int i=0; i<(int)books.size(); ++i) {
                 cout << books[i].name << " - " << books[i].release << endl;
          }

          return 0;

   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM