请教C++语言如何实现文件中倒序搜索某一字符串

来源:百度知道 编辑:UC知道 时间:2024/05/30 07:51:49
要搜索的文件Logs.xml格式如下:
<?xml version="1.0" encoding="gb2312"?>
<Logs>
<Log ID="0">
<Time>10-23 11:06:32</Time>
<Content>463</Content>
</Log>
<Log ID="1">
<Time>10-23 11:06:39</Time>
<Content>465</Content>
</Log>
<Log ID="2">
<Time>10-23 11:06:49</Time>
<Content>6554</Content>
</Log>
</Logs>
要搜索到其中的最后一个ID,也就是"2"。
实际的文件可能会很大,最好能倒序在文件中直接搜索到最后一个ID,且不要存储任何多余的文件。
请教各位爱好者,有什么办法可以实现?
如1楼的说法,万一“二分”文件的时候,“<【内容】>”标签从中间被“分开”,岂不是搜索不到了?

如2楼的说法,还是要一个一个字节的读取才行。

谁能给个C++源码啊!

给你几个函数:注意是在二进制文件的操作,就是打开时用:
ofstream outfile("文件名",ios::binary);
头文件:#include <fstream>
seekp(文件中的位置);用整形来表示位移量.
seekg(位称量,参照位置);
参照位置是如下几个:
ios::beg //文件开头
ios::cur //指针的当前位置
ios::end //文件末尾
如:
infile.seekg(100) //输入文件中的指针向前移到100字节位置;
infile.seekg(-50,ios::cur) //输入文件中的指针从当前位置后移50字节;
outfile.seep(-50,ios::end) //输出文件中的指针从文件尾后移50字节.
其他的你参考C++的教材,如果没有,再给我留言吧.我没有编程用过,但为你指了一条路,呵呵.

如2楼的说法,还是要一个一个字节的读取才行:这是显然的.你可以尝试用串来操作,但还是得一个一个来移动.但你可以连读两个,然后看看是不是要找的.对文件的操作都是这样的.你算是人要找也是一行一行看啊.而且处理起来是很快的.因为两个字符匹配的时间几乎为0.这是为什么现在的数字化这么流行.

可以借鉴二分查找的思想。把文件1分为二,在后半部分查找,如成功则递归查找后半部分,失败则递归前半部分,直到查找成功时文件只剩1行