我试图将制表符分隔的文件读取为字符串向量并显示它。但是我没有得到想要的输出。
这是我尝试读取并显示的文件:
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";
}
这是我得到的输出:
1amazonbillybob@kfc.compassword!23
2facebookdigitalGlut3n@ello.mailfri3dMayoNaize
3bank.combrokeDude@sofa.comLostTheRemot3!.CrapPress any key to continue . . .
我如何使我的函数显示为类似于原始文件,并且字符串之间有空格?
答案 0 :(得分:1)
单个字符串的向量对于结构化数据确实没有多大意义。结构向量更有意义,例如:
#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";
}
答案 1 :(得分:0)
如果您的数据库文件是固定格式。
您可以通过以下代码获取答案。
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";
}
在此代码中,在while循环中,入口变量为1,亚马逊,....
所以,我在每个字符串之间添加了制表符。
当i%8 == 0为true时,打印新行。
我希望它对您有帮助。