我有一个带有分号分隔符的分隔文件。我正在使用以下代码来阅读最后一行。我相信循环一直运行到最后一行并不断覆盖 lastLine 字符串。因此,一旦到达最后一行,循环就会中断,字符串就是最后一行。
while(getline(finlocal, chuy, ';'))
{
getline(finlocal,lastLine, ';');
}
cout<<lastLine; //last line.
但是这种方法不能正常有效地工作。有关如何知道此分隔文件的最后一行的任何建议。
我有一个带有分号分隔符的分隔文件。我正在使用以下代码来阅读最后一行。我相信循环一直运行到最后一行并不断覆盖 lastLine 字符串。因此,一旦到达最后一行,循环就会中断,字符串就是最后一行。
while(getline(finlocal, chuy, ';'))
{
getline(finlocal,lastLine, ';');
}
cout<<lastLine; //last line.
但是这种方法不能正常有效地工作。有关如何知道此分隔文件的最后一行的任何建议。
你没有解释你的问题是什么,但我猜它不会检查每一行,因为循环内的 getline() 指向下一个元素,所以你丢失了一半的元素。
while(getline(finlocal, chuy, ';'))
{
}
std::cout<<chuy;
应该管用
假设这是您的台词:
1.; <--
2.;
3.;
4.;
...
第一次迭代后,它转到:
1.; <--
2.; <--(由一会儿)
3.; <--(通过内部getline)
4.;
...
所以你失去了第二个元素。循环继续,最后
5.; <--(通过内部循环)
结尾。; <-- (by while):这将正确的行分配给 chuy 并指向下一个元素
这不存在,因此在 getline() 内部不起作用
如果文件不是很大,您可以先将整个文件放在一个字符串中,然后使用它string::find_last_of来查找分号的最后一个索引。然后打印从该索引到文件末尾的行。
利用
while(getline(finlocal, lastLine, ';'));
cout<<lastLine;
否则你可能不会得到最后一行。
您可以使用
while(getline(finlocal, lastLine, ';'))
{
getline(finlocal,lastLine, ';');
}
cout<<lastLine;
getline但是做两次没有意义
在你的情况下,为了更好的分隔符,我会使用一个特殊的符号,比如说:
char delimiter = 251;
char 是平方根的符号,很可能不会在聊天中使用。不过,对于收到的每条聊天消息,您都需要检查该标志是否正在那里使用,如果是,则将其删除。现在对于您发送的每条消息,在其末尾带有符号发送,并且在接收时,在该字符处用 . 分割getline。
这样你就可以在一个你知道用户不会弄乱的地方轻松拆分。