作者bamboopole (ㄈㄓ肥竹)
看板C_and_CPP
标题[问题] getline读档案多一行
时间Fri Oct 27 22:05:42 2023
以下是我的程式码
std::ifstream file(dataset);
std::vector<std::vector<std::string>> dataString;
std::string line = "";
while(getline(file, line)){
std::vector <std::string> vec;
boost::algorithm::split(vec, line, boost::is_any_of(delimeter));
dataString.push_back(vec);
}
file.close();
图片是我读的档案的最後端
https://i.imgur.com/2IJwDNB.jpg
档案总行数是32563,最後两行是空白的
我使用getline来读档
但我发现我读出来的vector长度是32562
然後如果我把读的档案的最後两个空白行删掉,结果又是正确的32561
想请问为什麽会有这个三个数字的差异
-----
Sent from JPTT on my iPad
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.70.63.65 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1698415544.A.C32.html
1F:→ Richun: 你档案用wc -l显示的也是32563吗?10/27 22:28
显示32562 跟原档getline得到的一样
2F:→ nh60211as: 你有试过只多一行吗10/27 22:40
只多一行是32561 是正确的
※ 编辑: bamboopole (61.70.63.65 台湾), 10/27/2023 22:53:41
※ 编辑: bamboopole (61.70.63.65 台湾), 10/27/2023 22:54:43
3F:→ nh60211as: 你对正确的定义怪怪的。getline是去读换行符号来分出10/27 23:03
4F:→ nh60211as: 一个line是什麽,所以就算是没有内容的line也是一个li 10/27 23:03
5F:→ nh60211as: ne10/27 23:03
6F:→ nh60211as: 然後你去看cppreference的话可以看到getline的终止条10/27 23:05
7F:→ nh60211as: 件是什麽,去比对一下你的输入应该就可以知道行为正不10/27 23:05
8F:→ nh60211as: 正确了10/27 23:05
9F:推 wulouise: 先把最後两行用什麽换行符号列出来10/28 00:27
10F:→ longlongint: 编辑器空行的屁股没有换行符号 所以要少算一行10/28 10:34
11F:→ longlongint: 应该是说 空行那行什麽都没有…10/28 10:34
感谢各位,我懂了
倒数第二行有换行符号,所以才会出现32563行
而最後一行没有换行符号,所以是直接结束
※ 编辑: bamboopole (180.217.202.238 台湾), 10/28/2023 11:36:29