📄 chnsort.c
字号:
//=================================================
// CHNSORT.C
// 两汉字串的笔划顺序比较动态库
//=================================================
//本程序用 MSVC++1.52 和 MSVC++5.0 编译通过
// 包含CHNSORT.DEF
// 在 MSVC++1.52 下创建工程文件选 Windows Dynamic-link Library(.DLL) 类型
// 在 MSVC++5.0 下创建工程文件选 Win32 Dynamic-link Library(.DLL) 类型
//
#include <WINDOWS.H>
#include <string.h>
#include <math.h>
//汉字笔划顺序码表
WORD Order[8192]={
0x0000,0x0011,0x0013,0x00d0,0x0027,0x0028,0x0025,0x004c,0x1dbd,0x0003,
0x0024,0x0029,0x00d1,0x002a,0x002b,0x002c,0x002d,0x0046,0x0048,0x0032,
此处为通过 refer 生成的refer.txt 的内容
.......................
.......................
0x1c28,0x1c75,0x1cf0,0x1d23,0x1d22,0x1b7f,0x1c29,0x1d24,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000 };
#ifdef WIN32
// 32位Windows程序
BOOL WINAPI DllMain(HANDLE hModule,DWORD dwReason,LPVOID lpReserved)
{
return TRUE;
}
#else
// 16位Windows程序
int FAR PASCAL LibMain(HANDLE hModule,WORD wDataSeg,WORD cbHeapSize,LPSTR lpszCmdLine)
{
if (cbHeapSize != 0)
UnlockData(0);
return 1;
}
int FAR PASCAL WEP (int bSystemExit)
{
return(1);
}
#endif
#define MAKEWORD(low, high) ((WORD)(((BYTE)(low)) | (((WORD)((BYTE)(high))) << 8)))
//从一字符串的指定位置取出一个字
WORD GetWord(LPSTR lpStr,LPWORD lpPos)
{
BYTE bHigh,bLow;
bHigh = lpStr[*lpPos] ;
if ( bHigh<=128 )
{
*lpPos=*lpPos+1;
return bHigh;
}
else
{
bLow = lpStr[*lpPos+1] ;
*lpPos=*lpPos+2;
return MAKEWORD(bLow,bHigh);
}
}
// 按笔划顺序比较字符串
// 返回值:
// < 0 字符串1 先于 字符串2
// = 0 字符串1 等于 字符串2
// > 0 字符串1 后于 字符串2
// lpStr1 ---- 字符串1
// lpStr2 ---- 字符串2
int _export FAR PASCAL ChnStrComp(LPSTR lpStr1,LPSTR lpStr2)
{
WORD wWord1,wWord2;
int nPos1,nPos2;
int nLeng1,nLeng2;
int nNo1,nNo2;
nLeng1=strlen(lpStr1);
nLeng2=strlen(lpStr2);
nPos1=nPos2=0;
while ( nPos1<nLeng1 && nPos2<nLeng2 )
{
wWord1=GetWord(lpStr1,&nPos1);
wWord2=GetWord(lpStr2,&nPos2);
if ( nPos1<nPos2 )
return -1;
else
if ( nPos1>nPos2 )
return 1;
else
{
if ( wWord1 >128 )
{
nNo1=(HIBYTE(wWord1)-0xA1)*94+LOBYTE(wWord1)-0xA1;
nNo2=(HIBYTE(wWord2)-0xA1)*94+LOBYTE(wWord2)-0xA1;
if ( Order[nNo1]<Order[nNo2] )
return -1;
else
if ( Order[nNo1]>Order[nNo2] )
return 1;
}
else
{
if ( wWord1 <wWord2 )
return -1;
else
if ( wWord1 >wWord2 )
return 1;
}
}
}
if ( nLeng1<nLeng2 )
return -1;
else
if ( nLeng1>nLeng2 )
return 1;
else
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -