c++从ifstream中读取一行的最后一个变量
c++ read the last variable of a line from ifstream
我正在从如下文件中读取一个表:
80 Sunny false 90 Play
75 Rainy true 88 Don't play
...
我使用ifstream(),问题是我需要最后一列的值(播放/不播放)来初始化前面的每个变量。那么,有没有一种方法可以先得到一行的最后一个元素,然后我可以从头开始读取其他元素?或者,有没有一种方法可以从后面读一行?
第0版:因此,我所做的是读取整行内容,以获得最后一个变量,然后循环遍历之前的所有变量来初始化它们。然而,这使性能受到很大影响。所以我正在寻找一种更快的方法
第1版:因此,每个变量都存储为一个结构,该结构还包含最后一个变量。在阅读了第一行之后,我将得到这样的结构数组:
(80,Play) (Sunny,Play) (false,Play) (90,Play)
为了初始化这些结构(或设置它们的第二个值),我需要知道最后一个变量。
第二版:很抱歉,我忘了加上"不要玩"也可以是"不玩",它不必有空格。
读取一个整数、一个字符串、一个布尔值和另一个整数,然后将它们全部丢弃,并使用std::getline
读取行的其余部分。
编辑后
你不需要最后一部分("播放"/"不播放"字符串)来创建四个不同的结构,你可以创建并部分初始化它们,然后读取最后一部分并完成结构初始化。
因此,正常读取前四个条目,但将它们保存到现有结构中。然后使用std::getline
读取"播放"/"不播放"字符串,并使用该字符串完成结构的初始化。
为了更安全起见,您可以首先使用std::getline
将整行读取到字符串中,将字符串放入std::istringstream
中,然后从字符串流中读取每个元素。
您可以用这种解决方案读取一行的最后一个元素:
std::string last_line_word_1(std::istream& in)
{
std::string line;
std::getline(in, line);
std::size_t last_pos = line.find_last_of(' ');
if(last_pos == std::string::npos)
last_pos = 0;
else
++last_pos;
return line.substr(last_pos, line.length() - last_pos);
}
std::string last_line_word_2(std::istream& in)
{
std::string line;
std::getline(in, line);
std::reverse(line.begin(), line.end());
std::istringstream iss(line);
std::string word;
iss >> word;
std::reverse(word.begin(), word.end());
return word;
}
相关文章:
- lower_bound()返回最后一个元素
- 获取向量C++中第一个值和最后一个值的和
- 获取用C/C++打印的最后一个字符串
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 为什么我的最后一个 ELSE 条件无法正确执行
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 仅显示链表的最后一个元素
- 测试迭代器是否位于列表中的最后一个
- push_back通过自行创建的对象获取最后一个元素的向量
- 使用 map.end() 访问 map 的最后一个元素
- 如何知道地图中的最后一个元素是否被删除?
- std::矢量保存 只推送最后一个元素
- 反转后不返回最后一个元素
- 丢失读入的每一行输入中的最后一个令牌
- c++从ifstream中读取一行的最后一个变量
- 你如何知道输入流何时到达一行中的最后一个单词
- 在一行最后一个单词之后立即退出While循环
- 如何在读取文本文件时跳到每行最后一个数字之后的下一行