复合词分离

 

//功能:isword()为判断是否为词库中的词的函数,通过递归判断一个词是否是复合词(词可以拆成若干独立的词)

int CutCom(char *str)

 wordCount++;   // 全局变量,初始值为0
 if(str == 0) return 1;
 if(strlen(str) == 0) return 1;
 if(strlen(str) < 4) return 0;
 int len = strlen(str);
 char *str_pre = (char *)calloc(sizeof(char),len);

 int i = 4;
 while(i < len + 1){ //i没有自加
  char *str_suf = (char *)calloc(sizeof(char),len - i + 1);
  wordcopy_pre(str_pre,str,i);
  wordcopy_suf(str_suf,str,i);
  str_pre[i] ='\0';
  if((len == i) && len == length_StrArr) return 0;    // legnth_StrArr 全局变量,初始值为0

  if(isword(str_pre)&&CutCom(str_suf))
   { 
    fputs(str_pre,fComToWords);
    fputs("\r",fComToWords);
    fputs("\n",fComToWords);
    return 1;
  }
  wordCount = 0;
  i++;
  i++;
  
  
 }
 if((i == len + 2) && wordCount == 0)
  return 0;

}

void wordcopy_pre(char *str_p,char *str,int i)
{
 int len = i;
 char *pstr_p = str_p;
 char *pstr = str;
 int index(0);
 int count(0);
 while(index++ < len){
  //count++;
  *pstr_p++ = *pstr++;
 
 }

}

void wordcopy_suf(char *str_suf,char *str,int i)
{
 int index(0);
 int len = i;
 char *pstr = str;
 char *pstr_suf = str_suf;
 while(index++ < len)
  *pstr++;
 while(*pstr){
  *pstr_suf++ = *pstr++; 
 }
}
int isword(char *str)
{
  char *StrArr = str;
 int ArrIndex = ELFHash(StrArr);

 int   Location = Arr[ArrIndex].SearchList(StrArr);
   if(Location<0)
    return 0;
     else
    return 1;
 
}

你可能感兴趣的:(复合词分离)