【问题标题】:I want to copy a whole text file line into a vector of strings, but the content is not fully copied我想将整个文本文件行复制到字符串向量中,但内容未完全复制
【发布时间】:2020-08-21 21:01:58
【问题描述】:

我正在尝试将文件行复制到字符串向量中,但没有得到我希望的结果。代码如下:

AmtCatania bus;
ifstream aprifile;
string buffer;
string partenza;
string destinazione;
string data;
string ora_partenza;
string ora_arrivo;
string ritardo;
string tratta;
vector <string> corsa;
aprifile.open("corse.txt");
if(!aprifile.is_open())
{
    cerr << "Registro non aperto!" << endl;
    return -1;
}

while(getline(aprifile, buffer , '\n'))
{

    corsa.push_back(buffer);
    aprifile >> partenza >> destinazione >> data >> ora_partenza >> ora_arrivo >> ritardo;
    bus.addTratta(tratta);
    bus.addPartenza(partenza);
    bus.addDest(destinazione);
    bus.addData(data);
    bus.addOraPart(ora_partenza);
    bus.addOraArr(ora_arrivo);
    bus.addRit(ritardo);
}

for (string s: corsa){
    cout << s << endl;
} 

此代码是巴士公司的一类。

这是文本文件

5 //corsa的数量 534 Scuole Borsellino 10/10 16:00 17:00 0 534 Scuole Borsellino 16/10 18:00 19:00 5 534 Scuole Borsellino 16/10 19:00 20:00 3 722 Borsellino Dusmet 19/10 13:30 14:25 10 722 Borsellino Dusmet 19/10 14:30 15:25 10

我愿意将每一行复制到一个字符串向量中,但我猜空格正在扼杀这个过程。

////更新/////

while(getline(aprifile, buffer , '\n'))
{
  corsa.push_back(buffer);
}
for(string s : corsa)
{
  s >> tratta >> partenza >> destinazione >> data >> ora_partenza >> ora_arrivo >> ritardo;
}

s >> tratta >> partenza >> destinazione >> data >> ora_partenza >> ora_arrivo >> ritardo;

给我一​​个错误,我现在应该如何解析内容?

【问题讨论】:

标签: c++ string file


【解决方案1】:

您实际上根本没有解析这些行。

您的循环从aprifile 读取一行到buffer,然后将buffer 按原样 推入corsa,然后再读取6 个以空格分隔的值 aprifile 的下一行 并将它们放入bus 然后被忽略。

换句话说,您的循环在每次迭代中都读取了太多内容。你对数据的读取和存储根本不符合文件的格式。

尝试类似的方法:

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

...

ifstream aprifile;
string buffer;
vector<AmtCatania> corsa;
int num_corsa;

aprifile.open("corse.txt");
if (!aprifile.is_open())
{
    cerr << "Registro non aperto!" << endl;
    return -1;
}

getline(aprifile, buffer);
istringstream(buffer) >> num_corsa;

for(int i = 0; (i < num_corsa) && getline(aprifile, buffer); ++i)
{
    string partenza;
    string destinazione;
    string data;
    string ora_partenza;
    string ora_arrivo;
    string ritardo;
    string tratta;

    istringstream(buffer) >> partenza >> destinazione >> data >> ora_partenza >> ora_arrivo >> ritardo >> tratta;

    AmtCatania bus;
    bus.addPartenza(partenza);
    bus.addDest(destinazione);
    bus.addData(data);
    bus.addOraPart(ora_partenza);
    bus.addOraArr(ora_arrivo);
    bus.addRit(ritardo);
    bus.addTratta(tratta);

    corsa.push_back(bus);
}

for (AmtCatania &bus: corsa){
    // print bus as needed...
} 

【讨论】:

    猜你喜欢
    • 2014-06-11
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多