http://tieba.baidu.com/p/1180650771?pid=13814874186&cid=0#13814874186
给你个函数看看,分析下有什么用
句列表指针 存储的是一句话的数据,其中已经分好词,并知道每个词的词性.
周春海(专有名词) 是(动词) 周依言(专有名词) 的(的词) 爸爸(抽象名词) .(句号词)
程序里的词性分法和语文课本中的分法有所不同. 是链,有链最后都可以归结为动词链
我的想法是把复杂的语句通过学习分解成简单的语句(程序可以理解的语句,就是程序里可以处理的语句),复杂的语句可能很多,但是简单的语句句型是有限的,通过编程,处理了简单语句,遇到复杂的语句通过句型分解成简单语句.
应答类::应答函数(句列表类* 句列表指针)
{
// 周春海是周依言的爸爸.
// 周春海是谁? 周春海 是 查找是链(周春海,0,0) 1 2 查找是链(1 0 0) 1 2 001,1,0,0,
// 周春海是爸爸? 确认是链(周春海,爸爸,0) 查找是链(1,3,0) 01(1,3,0)
// 周春海是谁的爸爸? 查找是链(周春海,爸爸,谁) 1 2 查找是链(1,5,3) 4 5 1 2 01(1,5,3) 4 5
// 周春海是周依言的什么? 查找是链(周春海,什么人,周依言)
// 周春海是周依言的爸爸? 确认是链(周春海,爸爸,周依言)
// 随是周依言的爸爸? 查找有链(周依言,爸爸,谁)
//周依言的爸爸是谁? 查找有链(周依言,爸爸,谁)
// 周春海和周依言是什么关系? 查找是链(周春海,什么关系,周依言),查找是链(周依言,?周春海)
CString 回应句型集=句列表指针->获取句型指针()->获取回应句型();
CString 回应句子句型,临时串;
int 可回应句子数量=回应句型集.Replace(_分号,_分号);
int i,临时数,原句成分个数,回应句子成分个数;
句类* 句类游标,**原句数组;
CString *回应句子数组;
回应句子数组=new CString [可回应句子数量];
if(回应句型集==_空字符)
{
待回应数据队列类 待回应操作;
句列表指针->设置所属处理流程(句列表指针->获取所属处理流程()+1000);
待回应操作.添加待回应队列(句列表指针,_应答格式);
传参指针->发送数据队列根指针->发送数据(句列表指针->获取环境指针()->获取套接字(),_应答格式+句列表指针->获取主键值()+_空格+句列表指针->获取原话());
return;
}
原句成分个数=句列表指针->获取句类根指针()->获取节点个数(句列表指针->获取句类根指针());
原句数组=new 句类* [原句成分个数+1];
句类游标=句列表指针->获取句类根指针()->获取下一个节点();
for( i=1;i<原句成分个数;i++)
{
原句数组[i]=句类游标;
句类游标=句类游标->获取下一个节点();
}
// _T(" 0x哦 1 2 00是类确认1,0,0,; 明白; 知道了;"); _T("1 2 00是类确认1,0,0,")
i=1;
do {
回应句子句型=回应句型集.Left(回应句型集.FindOneOf(_分号));
回应句型集=回应句型集.Right(回应句型集.GetLength()-回应句型集.FindOneOf(_分号)-1);
回应句子成分个数=回应句子句型.Replace(_空格,_空格);
do{
临时串=回应句子句型.Left(回应句子句型.FindOneOf(_空格));
回应句子句型=回应句子句型.Right(回应句子句型.GetLength()-回应句子句型.FindOneOf(_空格)-1);
if (临时串.Left(1)==_T("0"))
{
if(临时串.Left(3)==_T("000"))
{
回应句子数组[i]=回应句子数组[i]+临时串.Right(临时串.GetLength()-3);
continue;
}
int j, 参数个数=临时串.Replace(_逗号,_逗号);
CString 函数名=临时串.Left(3),参数串;
临时串=临时串.Right(临时串.GetLength()-3);
//回应句子数组[i]=回应句子数组[i].Right(回应句子数组[i].GetLength()-3);
句类** 句类参数数组;
句类参数数组=new 句类* [参数个数];
j=0;
do{
参数串=临时串.Left(临时串.FindOneOf(_逗号));
临时串=临时串.Right(临时串.GetLength()-临时串.FindOneOf(_逗号)-1);
句类参数数组[j]=原句数组[_ttoi(参数串)];
}while (j<参数个数);
switch(_ttoi(函数名))
{
case 0:
break;
case 1:
是类 是操作;
回应句子数组[i]=回应句子数组[i]+是操作.查找是链(句类参数数组[0],句类参数数组[1],句类参数数组[2]);
break;
}
delete [] 句类参数数组;
}else{
int j=_ttoi(临时串);
回应句子数组[i]=回应句子数组[i]+原句数组[j]->获取词指针()->获取主键值();
}
}while(回应句子句型.GetLength()>1);
}while(回应句型集.Replace(_分号,_分号)<1);
传参指针->发送数据队列根指针->发送数据(句列表指针->获取环境指针()->获取套接字(),回应句子数组[rand()%可回应句子数量]);
delete [] 回应句子数组;
delete [] 原句数组;
}