c++ - 查找 .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;
}
}
然后将其写入屏幕。
所以问题是,我如何找到计数?或者,还有更好的方法?
解决方案
你知道每一行都包含一个字符串、一个字符串和一个 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
这里使用的是数组而不是数组,这样我们甚至不必担心项目的数量,因为向量会动态调整自身大小!
推荐阅读
- windows - Azure CLI 2 身份验证在本地存储在哪里?
- sql - SQL,给数据库记录值并检查它们是否存在
- regex - TypeDoc 以及如何仅从少数路径中排除 *.d.ts 文件
- ios - Swift:使用 ARkit 漂移 scene.pointOfView
- php - php对while循环中的值求和不起作用
- excel - 使用 OptionButton 搜索列标题并使用 Excel VBA 插入新列
- laravel - laravel 5.6 如何获取所有组的消息数量?
- batch-file - 我可以批量定义一个带有另一个整数值的整数吗?
- regex - 从scala中的字符串中提取日期
- c++ - Qt 中的去抖动事件过滤器