如何在c++中打印结构数组中的所有内容
How to print everything from an struct array in c++?
我有一个结构化的数据类型,名为bookStruct,books是与bookStruct数据类型关联的变量的名称。book[10]是一个10个字符长的数组,有4个字符的数据,这意味着book[0]到book[3]中有数据,而其余数据为空(o值)。现在我想打印数组中已经可用的数据,而不是打印空的数据,否则为0。我尝试了下面的代码,但没有成功。我在这里做错了什么?
for (int i=0;i<MAX_BOOKS && books[i]!=' ';i++)
{
cout << "Book Title: " << books[i].bookTitle << endl;
cout << "Total Pages: " << books[i].bookPageN << endl;
cout << "Book Review: " << books[i].bookReview << endl;
cout << "Book Price: " << books[i].bookPrice<< "nn" << endl;
}
这是图书结构的声明
struct bookStruct
{
string bookTitle;
int bookPageN;
int bookReview;
float bookPrice;
};
bookStruct books[10];
重载输出运算符。例如:
struct Book {
string title;
int pageN;
int review;
float price;
};
ostream& operator<<(ostream& os, const Book& book) {
return os << "Title: " << book.title << endl
<< "Pages: " << book.pageN << endl
<< "Review: " << book.review << endl
<< "Price:" << book.price << endl;
}
然后你可以输出到任何流:
Book book;
ostringstream oss;
oss << book;
要循环浏览所有书籍,复制到std::cout
,只有当一本书有标题时,才需要std::copy_if
:
bool bookHasTitle(const Book& book) {
return book.title.empty() == false;
}
Book books[10];
copy_if(books, books+10, ostream_iterator<Book>(cout, "n"),
bookHasTitle);
很难判断这里问的是什么。你看,只记下你储存了多少本书是很容易的:
int numBooks = 0;
添加书本时,将numBooks
递增到MAX_BOOKS
。
for( int i=0; i<numBooks; i++ ) ...
如果您不想这样做,那么肯定不能测试books[i] != ' '
,因为这是针对单个字符测试结构。
相反,您可能想要测试books[i].bookTitle.size() != 0
(或者实际上是!books[i].bookTitle.empty()
)。
for( int i=0; i<MAX_BOOKS && !books[i].bookTitle.empty(); i++ ) ...
另一种选择是将书籍存储在vector
而不是数组中,这样您就不必担心最大计数和当前计数。矢量可以为您收缩和增长。
vector<bookStruct> books;
...
for( int i = 0; i < books.size(); i++ ) ...
#include <iostream>
using namespace std;
struct bookStruct
{
string bookTitle;
int bookPageN;
int bookReview;
float bookPrice;
void set(string t,int pn,int r,float pr){
bookTitle = t;
bookPageN = pn;
bookReview = r;
bookPrice = pr;
}
};
ostream& operator << (ostream& os, const bookStruct& book)
{
return os << "Title: " << book.bookTitle <<
" Pages: " << book.bookPageN <<
" Review: " << book.bookReview
<< " Price:" << book.bookPrice << endl;
}
int main() {
bookStruct books[10];
for(int i =0;i<10;i++){
books[i].set("Book " + to_string(i),i*20,i,(float) i*54);
}
for(int i=0;i<10;i++){
cout << books[i];
}
return 0;
}
Output:::
Title: Book 0 Pages: 0 Review: 0 Price:0
Title: Book 1 Pages: 20 Review: 1 Price:54
Title: Book 2 Pages: 40 Review: 2 Price:108
Title: Book 3 Pages: 60 Review: 3 Price:162
Title: Book 4 Pages: 80 Review: 4 Price:216
Title: Book 5 Pages: 100 Review: 5 Price:270
Title: Book 6 Pages: 120 Review: 6 Price:324
Title: Book 7 Pages: 140 Review: 7 Price:378
Title: Book 8 Pages: 160 Review: 8 Price:432
Title: Book 9 Pages: 180 Review: 9 Price:486
相关文章:
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 如何使用函数的输出初始化 const 数组结构字段?
- 传递数组结构、ofstream 和 interger 以运行
- 从文本文件中读取并输入到数组结构中,然后显示读取的数据C++
- 将文本文件读取到数组结构中
- C/C++中数组结构和数组结构的通用接口
- C++ MDC final-在字符类型的数组结构中按字母顺序对记录中的名称进行排序
- C++ 使用数组结构创建平衡的二叉搜索树
- C++:释放动态数组(结构成员)和指向此结构的指针的方法
- 使用 vector 在 c++ 中声明 3D 数组结构
- 数组结构无法正确打印
- 如何在C++中访问数组结构内部的数组结构
- CIN进入数组结构似乎什么也没输入
- ifstream将数组结构到txt文件中,然后尽可能将其提取为数组
- wlanapi-将WlanFreeMemory释放其WLAN_INTERFACE_INFO数组结构
- 显示数组结构 c++
- C++ 使用函数访问数组结构的方法是什么?
- 将庞大的数组结构复制到 GPU
- 如何封送包含字符矩阵的数组结构
- C++多维数组结构的对齐