⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 symtable.cpp

📁 数学公式分析
💻 CPP
字号:
// SymTable.cpp: Implementierung der Klasse CSymTable.
//
//////////////////////////////////////////////////////////////////////

#include "SymTable.h"
#include <string.h>
#include <stdlib.h>

//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////

CSymTable::CSymTable()
{

}

CSymTable::~CSymTable()
{

}

void CSymTable::PrepareSymTable( char *symbols )
{
    int i = 0, nchars = 1;
    memset( table, 0, 256 * sizeof(SymbolRec*) );
    while (*symbols) {
	if (*symbols=='\033') {
	    nchars = *++symbols;
	    ++symbols;
	} else {
	    SymbolRec **RecList = &table [*symbols];
	    SymbolRec *Rec = *RecList;
	    int count = 0;
	    while ( Rec ) {
		++count;
		if ( Rec->More )
		    ++Rec;
		else
		    break;
	    }
	    if ( Rec ) {
			*RecList = (SymbolRec*)
				realloc( *RecList, (count+1)*sizeof(SymbolRec) );
			Rec = *RecList + count;
			(Rec-1)->More = 1;
	    } else {
			SymbolRec* R = (SymbolRec*) malloc( 7 );
			*RecList=R;
			Rec = *RecList;
	    }
	    strncpy( Rec->Sym, symbols, 4 );
	    Rec->Len = (char) nchars;
	    Rec->Index = (char) i;
	    Rec->More = 0;
	    symbols += nchars;
	    ++i;
	}
    }
}

int CSymTable::FindSymbol( char *str, int *nchars )
{
    SymbolRec *Rec = table[ (int)*str ];
    while ( Rec ) {
	if ( (Rec->Len == 1 && Rec->Sym[0] == str[0])
	     ||
	     (Rec->Len == 2 && Rec->Sym[0] == str[0] && Rec->Sym[1] == str[1])
	     ||
	     (Rec->Len == 3 && Rec->Sym[0] == str[0] && Rec->Sym[1] == str[1]
	      && Rec->Sym[2] == str[2])
	   ) {
	    *nchars = Rec->Len;
	    return Rec->Index;
	}
	Rec = ( Rec->More ) ? Rec + 1 : NULL;
    }
    return -1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -