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;i cout单个字符串的向量对于结构化数据来说确实没有多大意义。结构的向量更有意义,例如:
#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;i std::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";
}