急!高分求文本文件内快速查找某个单词 我要在一个几M大小的文本文件内查找某个单词,如何快速找到它在文件内的位置,高手帮忙小弟:) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 分别从不同的位置开始查找单词,CFile::Seek()定位 几M大小??应该有什么算法可以解决的。如果没有算法那么只能靠硬找了。读入CString,然后使用CString的Find方法来找了! 把文件内如读入CString ,然后用Find查找 把文本中的所有单词读入一个STL的set/map里面,存储的时候自动用排序二叉树保存,查找就比较方便 //字符串模式匹配的KMP(D.E.Knuth-J.J.Morris-V.R.Pratt)算法int FindString(const char *pString,const char *pPattern){ int nPosT = 0; int nPosP = 0; int nPatternLength = strlen(pPattern); int nTLength = strlen(pString); //处理模式字符串先,生成失败函数 int* pF = new int[nPatternLength]; pF[0] = -1; for(int j = 1; j < nPatternLength; j++) { int i = pF[j - 1]; while(*(pPattern + j) != *(pPattern + i + 1) && i >= 0) i = pF[i]; if(*(pPattern + j) == *(pPattern + i + 1)) pF[i] = i + 1; else pF[j] = -1; } while(nPosP < nPatternLength && nPosT < nTLength) { if(pPattern[nPosP] == pString[nPosT]) { nPosT++; nPosP++; } else if(nPosP == 0) nPosT++; else nPosP = pF[nPosP - 1] + 1; } delete[] pF; if(nPosP < nPatternLength) return -1; else return nPosT - nPatternLength;} 其实我要做的就是在一个类似XML的文档中找到一些标志,如<cflo > </cflo>,然后取出标志之间的内容,以前就是把文件读到CString中查找,不过速度很慢,一个1.5M的要5分钟,现在要处里的都是在10M以上,慢的受不了拉TT,老板很不满意T_T,大家帮我想想办法 在说明一下,因为读文件的时候如果一块一读的话,在间隔的时候可能会把一个单词分开,所以我是一个字符一读,放到CString中,如果遇到换行,就为一个CString操作比查找比较标志 VC# 获取系统用户名,图片和用户类型 VS2008提交表单到php网页 C++程序与数据库相连的问题 内存增长。。。? http://blogs.msdn.com 颠倒的图象! 我想改变系统的字体为用户选择的这个字体应该怎么做呢? 大家互相结识一下,以后有问题可交流! vc高手帮帮忙啊!!!!!!! 请问哪有关于VC好的电子学习书籍下载!不胜感激! vc开发ATL, 想用 mscomm32.ocx 组件 , 怎么办呢? 高分求助!急!关于控件的字体
读入CString,然后使用CString的Find方法来找了!
int FindString(const char *pString,const char *pPattern)
{
int nPosT = 0;
int nPosP = 0;
int nPatternLength = strlen(pPattern);
int nTLength = strlen(pString);
//处理模式字符串先,生成失败函数
int* pF = new int[nPatternLength];
pF[0] = -1;
for(int j = 1; j < nPatternLength; j++)
{
int i = pF[j - 1];
while(*(pPattern + j) != *(pPattern + i + 1) && i >= 0)
i = pF[i];
if(*(pPattern + j) == *(pPattern + i + 1))
pF[i] = i + 1;
else
pF[j] = -1;
}
while(nPosP < nPatternLength && nPosT < nTLength)
{
if(pPattern[nPosP] == pString[nPosT])
{
nPosT++;
nPosP++;
}
else if(nPosP == 0)
nPosT++;
else
nPosP = pF[nPosP - 1] + 1;
} delete[] pF;
if(nPosP < nPatternLength)
return -1;
else
return nPosT - nPatternLength;
}