总算写完了分词系统了,心情很好,困惑了我好长时间,不过是自己独立完成的,很开心!下面是代码!
#include <iostream>
#include <fstream>
#include <cstring>
#include <stdlib.h>
#include <string>
//#include <ctype.h>
#include <sstream>
using namespace std;
int main()
{
int i,j,p;
int bufSum = 0;
int inDivideSum;
int inDivideNumInt;
int inDivideJudge[256];
int conversionInt;
int inDivideSumInt;
string input;
string buffer[150000];
string inDivide[256];
string inDivideNum;
ifstream file;
file.open("D:\\segdict.txt");
if(!file.good())
{
cout<<"error open";
exit(0);
}
while(!file.eof())
{
file>>buffer[bufSum];
bufSum++;
}
file.close();
while(cin>>input)
{
p = input.length();
inDivideSum = 0;
for(i = 0; i <= p-2; i += 2)
{
inDivide[inDivideSum] = input.substr(i,2);
inDivideJudge[inDivideSum]=0;
inDivideSum ++;
}
inDivideNumInt = 0;
for(i = 0; i < bufSum; i ++)
{
if(inDivideNumInt >= inDivideSum)
break;
if(buffer[i] == inDivide[inDivideNumInt])
{
inDivideJudge[inDivideNumInt] = 1;
inDivideNum = inDivide[inDivideNumInt];
inDivideNumInt ++;
stringstream ss;
ss<<buffer[i+1];
ss>>conversionInt;
inDivideSumInt = inDivideNumInt;
inDivideNum += inDivide[inDivideSumInt];
for(j = i+2; j < i+conversionInt+2; j++)
{
if(buffer[j] == inDivideNum)
{
inDivideJudge[inDivideSumInt - 1] = 0;
inDivideJudge[inDivideSumInt] = 1;
j = i+2;
inDivideSumInt ++;
inDivideNum += inDivide[inDivideSumInt];
}
}
inDivideNumInt = inDivideSumInt;
i = 0;
}
}
for(i = 0; i < inDivideSum; i ++)
{
if(inDivideJudge[i] == 0)
cout<<inDivide[i];
else
{
cout<<inDivide[i]<<" ";
}
}
cout<<endl;
}
return 0;
}
#include <iostream>
#include <fstream>
#include <cstring>
#include <stdlib.h>
#include <string>
//#include <ctype.h>
#include <sstream>
using namespace std;
int main()
{
int i,j,p;
int bufSum = 0;
int inDivideSum;
int inDivideNumInt;
int inDivideJudge[256];
int conversionInt;
int inDivideSumInt;
string input;
string buffer[150000];
string inDivide[256];
string inDivideNum;
ifstream file;
file.open("D:\\segdict.txt");
if(!file.good())
{
cout<<"error open";
exit(0);
}
while(!file.eof())
{
file>>buffer[bufSum];
bufSum++;
}
file.close();
while(cin>>input)
{
p = input.length();
inDivideSum = 0;
for(i = 0; i <= p-2; i += 2)
{
inDivide[inDivideSum] = input.substr(i,2);
inDivideJudge[inDivideSum]=0;
inDivideSum ++;
}
inDivideNumInt = 0;
for(i = 0; i < bufSum; i ++)
{
if(inDivideNumInt >= inDivideSum)
break;
if(buffer[i] == inDivide[inDivideNumInt])
{
inDivideJudge[inDivideNumInt] = 1;
inDivideNum = inDivide[inDivideNumInt];
inDivideNumInt ++;
stringstream ss;
ss<<buffer[i+1];
ss>>conversionInt;
inDivideSumInt = inDivideNumInt;
inDivideNum += inDivide[inDivideSumInt];
for(j = i+2; j < i+conversionInt+2; j++)
{
if(buffer[j] == inDivideNum)
{
inDivideJudge[inDivideSumInt - 1] = 0;
inDivideJudge[inDivideSumInt] = 1;
j = i+2;
inDivideSumInt ++;
inDivideNum += inDivide[inDivideSumInt];
}
}
inDivideNumInt = inDivideSumInt;
i = 0;
}
}
for(i = 0; i < inDivideSum; i ++)
{
if(inDivideJudge[i] == 0)
cout<<inDivide[i];
else
{
cout<<inDivide[i]<<" ";
}
}
cout<<endl;
}
return 0;
}