資源簡介
KMP中文字符匹配算法的C++實現

代碼片段和文件信息
//#include
#include
#include?
#include
#include
#include
#include
using?namespace?std;
const?int?s1?=?0XB0s2?=?0XA1e1?=?0XF8e2?=?0XFF;
const?int?maxwordlen?=?50;
struct?Second
{
string?key;
Second?*next;
Second(string?k?=?““Second?*n?=?0):key(k)next(n){}
};
struct?Head
{
int?size;
string?key;
vector?W;
Head(string?k?=?““int?s?=?0):key(k)size(s){}
};
void?get_nextval(const?char?*T?int?next[])
{
???????//?求模式串T的next函數值并存入數組?next。
???????int?j?=?0?k?=?-1;
???????next[0]?=?-1;
??????while?(?T[j/*+1*/]?!=?‘\0‘?)
???????{
??????????????if?(k?==?-1?||?T[j]?==?T[k])
?????????????{
?????????????????????++j;?++k;
?????????????????????if?(T[j]!=T[k])
????????????????????????????next[j]?=?k;
?????????????????????else
????????????????????????????next[j]?=?next[k];
??????????????}//?if
??????????????else
?????????????????????k?=?next[k];
???????}//?while
????////這里是我加的顯示部分
???//?for(int??i=0;i ???????//{
???????//?????cout< ???????//}
???????//cout< }
//下面是KMP模式匹配程序,各位可以用他驗證。記得加入上面的函數
int?KMP(const?char?*Textconst?char*?Pattern)?//const?表示函數內部不會改變這個參數的值。
{
???????if(?!Text||!Pattern||??Pattern[0]==‘\0‘??||??Text[0]==‘\0‘?)//
??????????????return?-1;//空指針或空串,返回-1。
???????int?len=0;
???????const?char?*?c=Pattern;
???????while(*c++!=‘\0‘)//移動指針比移動下標快。
???????{????
??????????????++len;//字符串長度。
???????}
???????int?*next=new?int[len+1];
???????get_nextval(Patternnext);//求Pattern的next函數值
???
???????int?index=0i=0j=0;
???????while(Text[i]!=‘\0‘??&&?Pattern[j]!=‘\0‘?)
???????{
??????????????if(Text[i]==?Pattern[j])
??????????????{
?????????????????????++i;//?繼續比較后繼字符
?????????????????????++j;
??????????????}
??????????????else
??????????????{
?????????????????????index?+=?j-next[j];
?????????????????????if(next[j]!=-1)
????????????????????????????j=next[j];//?模式串向右移動
?????????????????????else
?????????????????????{
????????????????????????????j=0;
????????????????????????????++i;
?????????????????????}
??????????????}
???????}//while
???
???????delete?[]next;
???????if(Pattern[j]==‘\0‘)
??????????????return?index;//?匹配成功
???????else
??????????????return?-1;??????
}
//Dictiory類為中文分詞,此處未用到,只是因項目需求就做了下,大家若有需要可以參考。
class?Dictiory
{
vector?H;
ifstream?fin;
ifstream?fcin;
ofstream?fout;
int?hash[e1?-?s1][e2?-?s2];
int?BinarySearch(string?strint?k);
int?GetNum();
void?LoadDic();
bool?IsC(char?c);
bool?IsEc(char?c);
void?AddWord(string?strint?k);
void?InsertWord(string?strint?k);
bool?IsWord(string?strint?kint?t);
void?SkipNotChinese(string?&strstack?&stk);
public:
Dictiory(string?sfilenamestring?dfilename);
void?SegmentWord(string?s);
void?PrintDic()
{
for(int?i?=?0;?i? for(int?j?=?0;?j? {
if(hash[i][j]?>=?0)
{
fout?<
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????170??2015-01-29?10:49??使用說明.txt
?????文件????????320??2015-01-25?15:35??fuzzyMatch\bookStack.txt
?????文件??????11674??2015-01-29?10:43??fuzzyMatch\Debug\BuildLog.htm
?????文件?????498688??2015-01-29?10:43??fuzzyMatch\Debug\fuzzySearch.exe
?????文件????????406??2015-01-29?10:43??fuzzyMatch\Debug\fuzzySearch.exe.em
?????文件????????472??2015-01-29?10:43??fuzzyMatch\Debug\fuzzySearch.exe.em
?????文件????????381??2015-01-29?10:43??fuzzyMatch\Debug\fuzzySearch.exe.intermediate.manifest
?????文件?????843204??2015-01-29?10:43??fuzzyMatch\Debug\fuzzySearch.ilk
?????文件?????816948??2015-01-29?10:43??fuzzyMatch\Debug\fuzzySearch.obj
?????文件????2739200??2015-01-29?10:43??fuzzyMatch\Debug\fuzzySearch.pdb
?????文件?????????65??2015-01-29?10:43??fuzzyMatch\Debug\mt.dep
?????文件??????91136??2015-01-25?15:33??fuzzyMatch\Debug\vc60.idb
?????文件?????151552??2015-01-25?15:30??fuzzyMatch\Debug\vc60.pdb
?????文件?????183296??2015-01-29?10:43??fuzzyMatch\Debug\vc90.idb
?????文件?????241664??2015-01-29?10:43??fuzzyMatch\Debug\vc90.pdb
?????文件?????784295??2008-10-24?21:50??fuzzyMatch\dictiory.txt
?????文件???????9319??2015-01-29?10:55??fuzzyMatch\fuzzySearch.cpp
?????文件???????3461??2015-01-24?14:52??fuzzyMatch\fuzzySearch.dsp
?????文件????????528??2015-01-24?17:34??fuzzyMatch\fuzzySearch.dsw
?????文件????2444288??2015-01-29?10:55??fuzzyMatch\fuzzySearch.ncb
?????文件??????48640??2015-01-25?00:52??fuzzyMatch\fuzzySearch.opt
?????文件???????7536??2015-01-25?15:30??fuzzyMatch\fuzzySearch.plg
?????文件????????887??2015-01-29?10:43??fuzzyMatch\fuzzySearch.sln
????..A..H.??????8192??2015-01-29?10:55??fuzzyMatch\fuzzySearch.suo
?????文件???????4901??2015-01-29?10:43??fuzzyMatch\fuzzySearch.vcproj
?????文件???????1427??2015-01-29?10:55??fuzzyMatch\fuzzySearch.vcproj.2012-20141127ES.Administrator.user
?????文件?????????22??2015-01-29?10:44??fuzzyMatch\resOfdivid.txt
?????文件??????????0??2015-01-29?10:44??fuzzyMatch\result.txt
?????文件?????????14??2015-01-29?10:44??fuzzyMatch\searchFor.txt
?????文件?????????16??2015-01-25?11:05??fuzzyMatch\sou.txt
............此處省略5個文件信息
評論
共有 條評論