c++ 如何在文件中匹配一个字符串

 我来答
lostuser
2010-09-14 · TA获得超过1836个赞
知道大有可为答主
回答量:972
采纳率:0%
帮助的人:0
展开全部
如果文件不是太大(比你当前的可用剩余内存小),且文件中不包含“0”这样的字节,直接把文件用一个缓冲调进内存,然后用字串搜索函数搜就是了;

如果文件确实太大,或者文件中可能包含“0”这样的字节,那么你需要自己编写模式匹配函数(就是与字串搜索函数类似功能的函数,网上有类似的C++源代码,但功能还不够)。

对含0数据的适应比较简单,搜索函数只要额外加两个缓冲区数据长度的参数传进去就行(代替以0结尾的字符串处理机制)——一个主缓冲长度,一个子串长度。

而跨缓冲区的搜索比较麻烦,因为搜索字很可能跨在两个相邻缓冲之间,这时搜索函数需要返回两个信息:一是搜索到的子串位置,二是本缓冲区内匹配了多少字节的子串(完全匹配时就是匹配了整个子串的长度);如果需要多次搜索子串在缓冲中的所有位置,则还需要把搜索起始位置做参数传进搜索函数。当然,这时子串在缓冲中搜索到的各位置必须转换为文件的绝对坐标才行。

跨缓冲区的搜索,上一缓冲的最后搜索结果(位置、已匹配长度)要带进下一缓冲的搜索,这些必要信息也要传进搜索函数,因此这是个复杂而参数众多的函数。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式