C++ 将文件中的一行拆分。(部分需要包括空格)c++;

C++ 将文件中的一行拆分。(部分需要包括空格)c++;,c++,file,parsing,split,getline,C++,File,Parsing,Split,Getline,我需要把文件中的一行分开。该文件包含具有id、作者、出版日期和标题的书籍列表 91507刘易斯·卡罗尔1865爱丽丝梦游仙境 作者的名字我可以分为第一个和最后一个,但是标题呢??我不知道该怎么处理。我应该创建第二个文件以便使用getline吗 我是一个新手,我不知道如何使用stringsteam进行此操作,或split()或类似操作,所以如果这是您的建议,请您解释一下发生了什么?我还没有完全理解我看过的任何示例,因此无法根据我的目的对其进行修改。请执行以下操作: #include <fst

我需要把文件中的一行分开。该文件包含具有id、作者、出版日期和标题的书籍列表

91507刘易斯·卡罗尔1865爱丽丝梦游仙境

作者的名字我可以分为第一个和最后一个,但是标题呢??我不知道该怎么处理。我应该创建第二个文件以便使用getline吗

我是一个新手,我不知道如何使用stringsteam进行此操作,或split()或类似操作,所以如果这是您的建议,请您解释一下发生了什么?我还没有完全理解我看过的任何示例,因此无法根据我的目的对其进行修改。

请执行以下操作:

#include <fstream>
using namespace std;

int main()
{
    ifstream fin("somefile.txt");
    string id = "";
    string authFirst = "";
    string authLast = "";
    string date = "";
    string title = "";
    string temp = "";
    fin >> id >> authFirst >> authLast >> date >> title;
    getline(fin, temp);

    title += temp;

    cout << title << endl;
    return 0;
}
#包括
使用名称空间std;
int main()
{
ifstream-fin(“somefile.txt”);
字符串id=“”;
字符串authFirst=“”;
字符串authLast=“”;
字符串日期=”;
字符串标题=”;
字符串temp=“”;
fin>>id>>authFirst>>authLast>>日期>>标题;
getline(财务、温度);
职位+=临时职位;
cout
ifstream-fin;
fin.open(文件名)
字符串id;
先串;
最后一串;
弦年;
字符串标题;
如果(fin.is_open())
{
而(!fin.eof())
{
fin>>id>>第一个>>最后一个>>年;
getline(财务、职务);

看过我的帖子后,我意识到你甚至不需要在fin系列的末尾输入标题;你可以让下一行的getline函数为你处理标题。你能解释一下while(!fin.eof())吗?我需要在我的程序中尝试一下,然后我会标记为已回答,但我通常说while(fin>>id>>first>>last>>year>>title);或类似的内容。当文件到达末尾时,while循环失败并停止,对吗?那么.eof()是如何工作的?它是内置函数吗?而(!fin.eof())eof-表示文件的结尾。!fin.eof()=true,因为eof()如果未设置eofbit标志,则返回false。当循环尝试通过文件结尾时,设置eofbit标志。当设置标志时,eof()返回true。您的方法也可以工作。我刚刚习惯使用!fin.eof()。eof()是从ios()继承的库的公共成员函数太棒了!真不敢相信在我苦苦挣扎之后它竟然如此简单!还有一个问题-为什么要使用if语句?if(fin.is_open())我这么做是因为如果文件没有成功打开,如果你没有打开,那么你会有更多的错误。你也必须这样做。别忘了关闭()这也是因为如果文件保持打开状态,则文件可能已损坏。
ifstream fin;
fin.open(filename)
string id;
string first;
string last;
string year;
string title;
if(fin.is_open())
{
    while(!fin.eof())
    {
      fin >> id >> first >> last >> year;
      getline(fin, title);
      cout << first << " " << last << " " << title << endl;
    }
   fin.close();
}