如何逐字读入文件并将这些字分配给结构?
How to read in from a file word by word and assign those words to a struct?
在我的项目中,我有一个 .txt 文件,顶部是书的数量,然后是书名及其作者,用 space 分隔,例如:
1
Elementary_Particles Michel_Houllebecq
然后我就有了本书的结构 object
struct book {
string title;
string author;
};
这些书 object 有一个书数组,因为有多个书和作者。我需要做的是逐字逐句地阅读这些内容,并将标题分配给book.title,将作者分配给book.author。这是我目前所拥有的:
void getBookData(book* b, int n, ifstream& file) { //n being the number at the top of the file
int count = 0;
string file_string;
while(!file.eof() && count != n-1) {
while (file >> file_string) {
b[count].title = file_string;
b[count].author = file_string;
count++;
}
}
当我 运行 使用这些输出时:
cout << book[0].title << endl;
cout << book[0].author << endl;
我得到:
Elementary_Particles
Elementary_Particles
基本上只取第一个字。我如何才能将第一个单词分配给 book.title,然后将下一个单词分配给 book.author?
谢谢
在这段代码中
while (file >> file_string) {
b[count].title = file_string;
b[count].author = file_string;
count++;
}
你读了 一个 单词并为标题和作者分配了 相同的 值,不要期望编译器猜到你的意图; )
一些额外的提示和想法:
while(!file.eof()
is not what you want,而是将输入操作放入循环条件中。并且可以跳过中间字符串直接读入title
/author
:
void getBookData(book* b, int n, ifstream& file) {
int count = 0;
while((file >> b[count].title >> b[count].author) && count != n-1) {
count++;
}
}
在我的项目中,我有一个 .txt 文件,顶部是书的数量,然后是书名及其作者,用 space 分隔,例如:
1
Elementary_Particles Michel_Houllebecq
然后我就有了本书的结构 object
struct book {
string title;
string author;
};
这些书 object 有一个书数组,因为有多个书和作者。我需要做的是逐字逐句地阅读这些内容,并将标题分配给book.title,将作者分配给book.author。这是我目前所拥有的:
void getBookData(book* b, int n, ifstream& file) { //n being the number at the top of the file
int count = 0;
string file_string;
while(!file.eof() && count != n-1) {
while (file >> file_string) {
b[count].title = file_string;
b[count].author = file_string;
count++;
}
}
当我 运行 使用这些输出时:
cout << book[0].title << endl;
cout << book[0].author << endl;
我得到:
Elementary_Particles
Elementary_Particles
基本上只取第一个字。我如何才能将第一个单词分配给 book.title,然后将下一个单词分配给 book.author?
谢谢
在这段代码中
while (file >> file_string) {
b[count].title = file_string;
b[count].author = file_string;
count++;
}
你读了 一个 单词并为标题和作者分配了 相同的 值,不要期望编译器猜到你的意图; )
一些额外的提示和想法:
while(!file.eof()
is not what you want,而是将输入操作放入循环条件中。并且可以跳过中间字符串直接读入title
/author
:
void getBookData(book* b, int n, ifstream& file) {
int count = 0;
while((file >> b[count].title >> b[count].author) && count != n-1) {
count++;
}
}