1

我有一个带有分号分隔符的分隔文件。我正在使用以下代码来阅读最后一行。我相信循环一直运行到最后一行并不断覆盖 lastLine 字符串。因此,一旦到达最后一行,循环就会中断,字符串就是最后一行。

while(getline(finlocal, chuy, ';'))
{
       getline(finlocal,lastLine, ';');
}

cout<<lastLine; //last line.

但是这种方法不能正常有效地工作。有关如何知道此分隔文件的最后一行的任何建议。

4

3 回答 3

5

你没有解释你的问题是什么,但我猜它不会检查每一行,因为循环内的 getline() 指向下一个元素,所以你丢失了一半的元素。

while(getline(finlocal, chuy, ';'))
{

}
std::cout<<chuy;

应该管用

假设这是您的台词:

1.; <--

2.;

3.;

4.;

...

第一次迭代后,它转到:

1.; <--

2.; <--(由一会儿)

3.; <--(通过内部getline)

4.;

...

所以你失去了第二个元素。循环继续,最后

5.; <--(通过内部循环)

结尾。; <-- (by while):这将正确的行分配给 chuy 并指向下一个元素

这不存在,因此在 getline() 内部不起作用

于 2013-09-08T07:38:49.737 回答
0

如果文件不是很大,您可以先将整个文件放在一个字符串中,然后使用它string::find_last_of来查找分号的最后一个索引。然后打印从该索引到文件末尾的行。

于 2013-09-08T07:38:36.740 回答
0

利用

while(getline(finlocal, lastLine, ';'));
cout<<lastLine;

否则你可能不会得到最后一行。

您可以使用

    while(getline(finlocal, lastLine, ';'))
    {
       getline(finlocal,lastLine, ';');
    }
    cout<<lastLine;

getline但是做两次没有意义

在你的情况下,为了更好的分隔符,我会使用一个特殊的符号,比如说:

char delimiter = 251;

char 是平方根的符号,很可能不会在聊天中使用。不过,对于收到的每条聊天消息,您都需要检查该标志是否正在那里使用,如果是,则将其删除。现在对于您发送的每条消息,在其末尾带有符号发送,并且在接收时,在该字符处用 . 分割getline

这样你就可以在一个你知道用户不会弄乱的地方轻松拆分。

于 2013-09-08T07:41:04.410 回答