首页 > 解决方案 > 查找 .txt 文件中的项目数

问题描述

我正在寻找一种方法来查找 .txt 文件中的项目数。

文件结构如下:

students.txt pricem 1441912123
house.pdf jatkins 1442000124
users.txt kevin_tomlinson 1442001032
accounts.mdb kevin_tomlinson 1442210121
vacation.jpg smitty83 1442300125
calendar.cpp burtons 1442588012

在这个例子中,结果应该是 18,因为这个文件中有 18 个单独的“单词”。

我需要这个值,这样我就可以遍历这些项目并将它们分配给一个结构数组(也许有一种方法可以同时完成这两个步骤?):

// my structure
struct AccessRecord
{
   string filename;
   string username;
   long timestamp;
};

// new instance of AccessRecord
// max possible records: 500
AccessRecord logRecords[500];

// while file has content
while (!fin.eof())
{
   // loop through file until end
   // max possible records: 500
   for (int i = 0; i < 500; i++) // need to figure out how to iterate
   {
      fin >> logRecords[i].filename
          >> logRecords[i].username
          >> logRecords[i].timestamp;
   }
}

然后将其写入屏幕。

所以问题是,我如何找到计数?或者,还有更好的方法?

标签: c++

解决方案


你知道每一行都包含一个字符串、一个字符串和一个 long,所以你可以迭代:

std::vector<AccessRecord> logs;
std::string fname, uname;
long tstamp;
while(fin >> fname >> uname >> tstamp) {
    logs.push_back(AccessRecord(fname, uname, tstamp));
    //To avoid copies, use: (thanks @Rakete1111!)
    //logs.emplace_back(std::move(fname), std::move(uname), tstamp);
}

这是假设您已经为您的结构创建了一个构造函数,例如:

AccessRecord(std::string f, std::string u, long t)
               : filename(f), username(u), timestamp(t) { }

请注意,我在std::vector这里使用的是数组而不是数组,这样我们甚至不必担心项目的数量,因为向量会动态调整自身大小!


推荐阅读