C++ C++;将制表符分隔的文件读入矢量并显示它

C++ C++;将制表符分隔的文件读入矢量并显示它,c++,C++,我正在尝试将制表符分隔的文件读入字符串向量并显示它。但是我没有得到想要的输出 这是我试图读入并显示的文件: 1 amazon billybob@kfc.com password!23 2 facebook digitalGlut3n@ello.mail fri3dMayoNaize 3 bank.com brokeDude@sofa.com LostTheRemot3!.Crap 这是我的显示功能: void DisplayRecords() { v

我正在尝试将制表符分隔的文件读入字符串向量并显示它。但是我没有得到想要的输出

这是我试图读入并显示的文件:

1   amazon  billybob@kfc.com    password!23
2   facebook    digitalGlut3n@ello.mail fri3dMayoNaize
3   bank.com    brokeDude@sofa.com  LostTheRemot3!.Crap
这是我的显示功能:

void DisplayRecords() {

    vector<string> vRecords;
    ifstream inFile("database.txt");

    string entry;

    while (inFile >> entry) {
        vRecords.push_back(entry);
    }

    for (int i = 0; i < vRecords.size(); i++) {
        if (i % 4 == 0) {
            cout << "\n";
        }
        cout << setw(5) << vRecords[i];
    }

    cout << "\n\n";
}

如何使函数显示得与原始文件相似,字符串之间留有空格

如果数据库文件为固定格式

你们可以通过下面的代码得到答案

void DisplayRecords() {

  vector<string> vRecords;
  ifstream inFile("database.txt");

  string entry;

  while (inFile >> entry) {
    vRecords.push_back(entry);
    vRecords.emplace_back("\t");
  }

  for (int i = 0; i < vRecords.size(); i++) {
    if (i % 8 == 0) {
      cout << "\n";
    }
    cout << setw(5) << vRecords[i];
  }

  cout << "\n\n";
}
void DisplayRecords(){
矢量记录;
ifstream-infle(“database.txt”);
字符串输入;
while(填充>>条目){
vRecords.push_back(进入);
vRecords.emplace_back(“\t”);
}
对于(int i=0;icout单个字符串的向量对于结构化数据来说确实没有多大意义。结构的向量更有意义,例如:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>

struct Record
{
    std::string id;
    std::string site;
    std::string user;
    std::string pass;
};

void DisplayRecords()
{
    std::vector<Record> vRecords;
    std::ifstream inFile("database.txt");
    std::string entry;

    while (std::getline(inFile, entry))
    {
        std::istringstream iss(entry);

        Record rec;
        std::getline(iss, rec.id, '\t');
        std::getline(iss, rec.site, '\t');
        std::getline(iss, rec.user, '\t');
        std::getline(iss, rec.pass, '\t');

        vRecords.push_back(rec);
    }

    for (int i = 0; i < vRecords.size(); ++i)
    {
        Record &rec = vRecords[i];
        std::cout << std::setw(5)  << rec.id
                  << std::setw(10) << rec.site
                  << std::setw(30) << rec.user
                  << std::setw(30) << rec.pass
                  << "\n";
    }

    std::cout << "\n";
}
#包括
#包括
#包括
#包括
结构记录
{
std::字符串id;
字符串站点;
std::字符串用户;
std::字符串传递;
};
void DisplayRecords()
{
std::向量向量向量记录;
std::ifstream infle(“database.txt”);
std::字符串条目;
while(std::getline(填充,输入))
{
std::istringstream iss(条目);
记录记录;
std::getline(iss,rec.id,'\t');
std::getline(iss,rec.site,'\t');
std::getline(iss,rec.user,'\t');
std::getline(iss,rec.pass,'\t');
vRecords.推回(rec);
}
对于(int i=0;istd::cout一件小事。for循环中的if语句在
i%4==0
时触发,但从
i=0
开始,其中
i%4==0
是正确的。必须指出,除了换行符之外,您当前没有在记录之间输出任何空格,这让人感觉近乎疯狂。因此,如果您想要在记录之间留空格,请ds,然后您需要输出它们。我明白。我不应该说“空格”。我正在使用setw()设置列宽,以帮助保持一致和对齐。我不应该
cout>>“”
我将值从5调整到了30,现在看起来更好了,但仍然不好。这是非常清晰简洁的代码。感谢您的帮助。在阅读了更多关于structs的内容后,我同意您的看法。
#include <iostream>
#include <vector>
#include <string>
#include <sstream>

struct Record
{
    std::string id;
    std::string site;
    std::string user;
    std::string pass;
};

void DisplayRecords()
{
    std::vector<Record> vRecords;
    std::ifstream inFile("database.txt");
    std::string entry;

    while (std::getline(inFile, entry))
    {
        std::istringstream iss(entry);

        Record rec;
        std::getline(iss, rec.id, '\t');
        std::getline(iss, rec.site, '\t');
        std::getline(iss, rec.user, '\t');
        std::getline(iss, rec.pass, '\t');

        vRecords.push_back(rec);
    }

    for (int i = 0; i < vRecords.size(); ++i)
    {
        Record &rec = vRecords[i];
        std::cout << std::setw(5)  << rec.id
                  << std::setw(10) << rec.site
                  << std::setw(30) << rec.user
                  << std::setw(30) << rec.pass
                  << "\n";
    }

    std::cout << "\n";
}