c++如何在文件中匹配一个字符串
答案:2 悬赏:60 手机版
解决时间 2021-12-16 02:35
- 提问者网友:刪了回忆、却刪不了痛
- 2021-12-15 16:29
c++如何在文件中匹配一个字符串
最佳答案
- 五星知识达人网友:只是一只团子
- 2021-12-15 17:23
如果文件不是太大(比你当前的可用剩余内存小),且文件中不包含“0”这样的字节,直接把文件用一个缓冲调进内存,然后用字串搜索函数搜就是了;
如果文件确实太大,或者文件中可能包含“0”这样的字节,那么你需要自己编写模式匹配函数(就是与字串搜索函数类似功能的函数,网上有类似的C++源代码,但功能还不够)。
对含0数据的适应比较简单,搜索函数只要额外加两个缓冲区数据长度的参数传进去就行(代替以0结尾的字符串处理机制)——一个主缓冲长度,一个子串长度。
而跨缓冲区的搜索比较麻烦,因为搜索字很可能跨在两个相邻缓冲之间,这时搜索函数需要返回两个信息:一是搜索到的子串位置,二是本缓冲区内匹配了多少字节的子串(完全匹配时就是匹配了整个子串的长度);如果需要多次搜索子串在缓冲中的所有位置,则还需要把搜索起始位置做参数传进搜索函数。当然,这时子串在缓冲中搜索到的各位置必须转换为文件的绝对坐标才行。
跨缓冲区的搜索,上一缓冲的最后搜索结果(位置、已匹配长度)要带进下一缓冲的搜索,这些必要信息也要传进搜索函数,因此这是个复杂而参数众多的函数。
如果文件确实太大,或者文件中可能包含“0”这样的字节,那么你需要自己编写模式匹配函数(就是与字串搜索函数类似功能的函数,网上有类似的C++源代码,但功能还不够)。
对含0数据的适应比较简单,搜索函数只要额外加两个缓冲区数据长度的参数传进去就行(代替以0结尾的字符串处理机制)——一个主缓冲长度,一个子串长度。
而跨缓冲区的搜索比较麻烦,因为搜索字很可能跨在两个相邻缓冲之间,这时搜索函数需要返回两个信息:一是搜索到的子串位置,二是本缓冲区内匹配了多少字节的子串(完全匹配时就是匹配了整个子串的长度);如果需要多次搜索子串在缓冲中的所有位置,则还需要把搜索起始位置做参数传进搜索函数。当然,这时子串在缓冲中搜索到的各位置必须转换为文件的绝对坐标才行。
跨缓冲区的搜索,上一缓冲的最后搜索结果(位置、已匹配长度)要带进下一缓冲的搜索,这些必要信息也要传进搜索函数,因此这是个复杂而参数众多的函数。
全部回答
- 1楼网友:哥的霸氣荍不住
- 2021-12-15 18:14
先加头文件#include
char a[10]="123";
char b[10]="abc";
strcat(a,b); //连接两个字符串,连接后的字符串存放在a中,数组a中有足够空间
printf("%s",a); //输出连接后的字符串
或:
#include
char a[10]="123";
char b[10]="abc";
char c[20];
strcpy(c,a); //把串a复制到有足够空间的c中
strcat(c,b); //把b连接到c的串尾
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯