Autoword.cpp
上传用户:hyb6888
上传日期:2016-01-24
资源大小:5186k
文件大小:3k
- // AppDict.cpp: implementation of the AppDict class.
- //
- //////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "Autoword.h"
- #include "windows.h"
- #include "stdio.h"
- #include "resource.h"
- #include "DllManager.h"
- extern DllManager ChLib;//定义在主DLL中
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- Autoword::Autoword()
- {
- Curp=0;
- bufhead=0;
- buflong=0;
- chbuf[0]=0;
- ChiSS[0]=0;
- }
- int Autoword::AppOne(char * pChi)
- {
- char NewWord[70];
- int ret=0;
- insertword(pChi,NewWord);
- if(NewWord[0]!=0)
- {
- AppSetDict(NewWord);
- ret=1;
- }
- return ret;
- }
- int Autoword::AppSetDict(char *NewWord)
- {
- char temss[2000]="";
- char path[100]="c:\jsime\";
- FILE *infp;
- char ss[2000];
- ChLib.ChissToCodeC("c:\jsime\MainCode.txt", NewWord, temss);
- if(strlen(temss)==4)
- {
- infp=fopen("c:\jsime\AutoSource.txt", "a"); //打开文字文件
- if(infp==NULL){
- MessageBox(0,"c:\jsime\AutoSource.txt装载失败","fopen",0);
- return -1;
- }
-
- sprintf(ss,"xdxa%s %s",temss,NewWord);
- fwrite(ss,strlen(ss),1,infp);
- fclose(infp);
- }
- return 0;
- }
- /////////////////////////////////////////////////
- //
- int Autoword::insertword(char *ch,char *NewWord)
- {
- char tembuf[70];
- int ret=0;
- try
- {
- insertBuf(ch); //把汉字插入到缓冲区中。
- getbuf(tembuf); //扫描缓冲区,检查新词。
- //MessageBox(0,tembuf,0,0);
- ret=FindNewWord(tembuf,NewWord);//此程序已经实现。
- } catch (...) {
- MessageBox(0,"insertword","有错误发生",0);
- }
- return ret;
- }
- //由于要求环以0作为结束符,所以环的长度应为61,总的存储长度必须62或以上。
- Autoword::insertBuf(char *ch) //缓冲区采用环形缓冲
- { //要求缓冲区的指针指向当前下一个要插入位置。
- chbuf[Curp]=ch[0];
- chbuf[Curp+1]=ch[1];
- chbuf[Curp+2]=0;
- Curp=( Curp+2)%60; //用运算进行环处理
- if (buflong==60)
- {
- bufhead=( bufhead+2)%60;
- }
- else
- buflong+=2;//缓冲区的长度加1个汉字长度。
- }
- //要求缓冲区必须以0作为结束符
- Autoword::getbuf(char *tembuf)//从环形缓冲区中取出字符串
- {
- int lon;
- lon=strlen(&chbuf[bufhead]);
- if(lon>buflong)
- sprintf(tembuf,"%s%s",&chbuf[bufhead],&chbuf[0]);
- else
- strcpy(tembuf,&chbuf[bufhead]);
- }
- //能从指定的串中找出最长匹配。
- int Autoword::FindNewWord(char *buf,char *mynewword)
- {
- char ss[1000],*p;
- int i,j,t,testlen=0,len;
- int ret=0;
- strcpy(ss,buf);
- len=strlen(ss);
- if(len>7)
- {
- _strrev(ss);
- p=ss;
- for(i=4;i<len;i++)
- {
- if(ss[i]==p[0])
- {
- for(j=i,t=0;j<len;j++,t++)
- {
- if(ss[j]!=p[t])
- break;
- }
- if(testlen<t)
- testlen=t;
- }
- }
- ss[testlen]=0;
- if(strlen(ss)>=4)
- {
- _strrev(ss);
- strcpy(mynewword,ss);
- ret=strlen(ss);
- }
- }
- return ret;
- }