📄 classes.cpp
字号:
#include "Classes.h"
///////////////////////////////////////////
// function of protected.............
///////////////////////////////////////////
//对字符进行分类编码
int CWordAnalyzing::CodeChar(char ch)
{
if(ch >= '0' && ch <= '9')
return 0;
else if( (ch >= 'a' && ch <= 'z')||(ch >= 'A' && ch <= 'Z') )
return 1;
else if(ch =='+' || ch =='-' || ch =='*'|| ch =='/' || ch =='=')
return 2;
else if( ch == '(' || ch == ')' || ch == ';')
return 3;
else if( ch == (char)9 || ch == (char)10 || ch == ' ' ||ch == (char)0)
return 4;
else if( ch == '.')
return 5;
else
return 6;
}
int CWordAnalyzing::GetNextState(int iCurrentState,int iIpt)
{
return m_StateMap[iCurrentState][iIpt];
}
//end of protected function....
/////////////////////////////////////////////////
// function of public...
/////////////////////////////////////////////////
CWordAnalyzing::CWordAnalyzing()
{
m_pSrcChar = NULL;
m_nCharLength = 0;
m_iNodeUsedPos = 0;
m_iWordLine = 1;
m_pNode = new SResultNode[100];
//m_StateMap[8][7];
int arrTemp[8][7] ={
{1,2,3,4,0,-1,-1},
{1,-1,6,6,6,5,-1},
{2,2,7,7,7,-1,-1},
{-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1},
{1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1},
};
for(int i=0;i<8;i++)
{
for(int j=0;j<7;j++)
{
m_StateMap[i][j] = arrTemp[i][j];
}
}
}
CWordAnalyzing::~CWordAnalyzing()
{
for(int i=0;i<m_iNodeUsedPos;i++)
{
delete []m_pNode[i].m_pWord;
}
delete []m_pNode;
}
void CWordAnalyzing::Create(char *pSrcChar,int nLength)
{
m_pSrcChar = pSrcChar;
m_nCharLength = nLength;
}
bool CWordAnalyzing::WordAnalyzing()
{
int iStrBeginPos =0; //当前单词的开始位置
int iCurrentState = 0; //当前状态
int iIpt = 0; // 当前状态接受的输入
char ch;
for(int i=0;i<m_nCharLength;i++)
{
ch = m_pSrcChar[i];
int a = 1;
if((int)ch == 10)
{
m_iWordLine++;
//ch = m_pSrcChar[i];
}
iIpt = CodeChar(ch);
iCurrentState = GetNextState(iCurrentState,iIpt);
if(iCurrentState == 0)
{
iStrBeginPos = i+1;
continue;
}
else if(iCurrentState == 3)
{
//开始填充单词属性
m_pNode[m_iNodeUsedPos].m_pWord = new char[1];
m_pNode[m_iNodeUsedPos].m_pWord[0] = ch;
m_pNode[m_iNodeUsedPos].m_nWord =1;
m_pNode[m_iNodeUsedPos].m_iCode = 3;
m_iNodeUsedPos++;
//结束填充
iStrBeginPos = i+1;
iCurrentState = 0;
}
else if(iCurrentState == 4)
{
//开始填充单词属性
m_pNode[m_iNodeUsedPos].m_pWord = new char[1];
m_pNode[m_iNodeUsedPos].m_pWord[0] = ch;
m_pNode[m_iNodeUsedPos].m_nWord =1;
m_pNode[m_iNodeUsedPos].m_iCode = 4;
m_iNodeUsedPos++;
//结束填充
iStrBeginPos = i+1;
iCurrentState = 0;
}
else if(iCurrentState == 6)
{
//开始填充单词属性
m_pNode[m_iNodeUsedPos].m_pWord = new char[i-iStrBeginPos];
int k=0;
for(int j=iStrBeginPos;j<i;j++)
{
m_pNode[m_iNodeUsedPos].m_pWord[k] = m_pSrcChar[j];
k++;
}
m_pNode[m_iNodeUsedPos].m_nWord =i-iStrBeginPos;
m_pNode[m_iNodeUsedPos].m_iCode = 2;
m_iNodeUsedPos++;
//结束填充
iStrBeginPos = i;
i--;
iCurrentState = 0;
}
else if(iCurrentState == 7)
{
//开始填充单词属性
m_pNode[m_iNodeUsedPos].m_pWord = new char[i-iStrBeginPos];
int k=0;
for(int j=iStrBeginPos;j<i;j++)
{
m_pNode[m_iNodeUsedPos].m_pWord[k] = m_pSrcChar[j];
k++;
}
m_pNode[m_iNodeUsedPos].m_nWord =i-iStrBeginPos;
m_pNode[m_iNodeUsedPos].m_iCode = 1;
m_iNodeUsedPos++;
//结束填充
iStrBeginPos = i;
i--;
iCurrentState = 0;
}
else if(iCurrentState == -1)
{
for(int j=iStrBeginPos;j<i;j++)
{
cout<<m_pSrcChar[j];
}
cout<<"*"<<"是不合法单词"<<endl;
cout<<"在行"<<m_iWordLine<<" "<<endl;
return false;
}
}
return true;
}
void CWordAnalyzing::DisPlayResult()
{
for(int i=0;i<m_iNodeUsedPos;i++)
{
cout<<m_pNode[i].m_iCode<<" ";
for(int j=0;j<m_pNode[i].m_nWord;j++)
{
cout<<m_pNode[i].m_pWord[j];
}
cout<<endl;
}
}
void CWordAnalyzing::GetWords(SResultNode **pNode,int &nLength)
{
*pNode = m_pNode;
nLength = m_iNodeUsedPos;
}
//end of public function...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -